스레드와 OR 병렬성 통합

스레드와 OR 병렬성 통합
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 YAP Prolog 엔진 위에 다중 스레드 기반으로 재구성한 YapOr 시스템을 제안한다. 기존 OR‑parallelism 기법을 현대의 저비용 멀티코어 환경에 맞게 최적화하여, 실행 환경·스케줄러·데이터 구조를 공유함으로써 거의 선형에 가까운 속도 향상을 달성한다.

상세 분석

YapOr는 전통적으로 프로세스 기반의 OR‑parallelism 구현체였으며, 각 워커가 독립적인 메모리 공간을 갖는 구조였다. 이러한 설계는 다중 코어 환경에서 오버헤드가 크게 발생하고, 메모리 사용 효율이 낮다는 한계를 가지고 있었다. 본 연구는 이러한 문제점을 해결하기 위해 YAP Prolog의 최신 버전을 기반으로 다중 스레드 모델을 도입한다. 스레드 간에는 동일한 힙과 스택을 공유하지만, 워커마다 로컬 스택을 유지함으로써 데이터 경쟁을 최소화한다. 핵심은 워커 스케줄러를 하나의 전역 큐가 아니라 각 워커가 관리하는 로컬 워크리스트와 전역 워크리스트를 혼합한 하이브리드 방식으로 설계한 점이다. 이를 통해 작업 부하가 불균형할 때는 워커가 다른 워커의 로컬 리스트에서 작업을 훔치는(work‑stealing) 메커니즘을 적용한다. 또한, 선택점(choice point)과 환경(environment) 구조를 재사용 가능하도록 설계하여 메모리 할당·해제 비용을 크게 낮춘다. 동기화는 POSIX pthread mutex와 condition variable을 이용하되, 가능한 한 락‑프리 알고리즘을 적용해 스레드 간 컨텍스트 전환 비용을 최소화한다. 이러한 설계는 YAP Prolog의 JIT 컴파일러와도 호환되며, 기존의 인덱싱·절차적 최적화와 충돌 없이 동작한다. 실험에서는 n‑queens, SAT‑solver, 그래프 색칠 등 다양한 논리 프로그램을 대상으로 4, 8, 16 코어에서 테스트했으며, 대부분 0.9 × 코어 수에 근접하는 속도 향상을 보였다. 특히, 작업량이 큰 경우와 메모리 접근 패턴이 지역성을 보이는 경우에 거의 선형 스케일링을 달성했다. 반면, 매우 얕은 탐색 트리를 갖는 프로그램에서는 스케줄링 오버헤드가 상대적으로 크게 나타나 속도 향상이 제한적이었다. 전체적으로 이 연구는 OR‑parallelism을 현대 멀티코어 환경에 맞게 재구성함으로써, 기존 프로세스 기반 구현보다 메모리 효율과 실행 속도 모두에서 우수한 성능을 입증한다.


댓글 및 학술 토론

Loading comments...

의견 남기기