OpenMP를 사용하여 일부 긴 계산을 병렬로 수행하는 C++ 프로그램이 있습니다. 이제이 프로그램은 사용자 입력에 응답하고 그래픽을 업데이트해야합니다. 지금까지 메인/GUI 스레드에서 계산을 시작하여 작업 부하를 조심스럽게 밸런싱하여 OpenMP 스레딩 오버 헤드를 줄이거 나 길게 GUI가 응답하지 않게하지 않았습니다.OpenMP를 사용하는 프로그램에서 GUI 스레드 처리
분명히 모든 것을 동시에 실행하여 수정하고 싶습니다. 내가 알 수있는 한, OpenMP 2.5는이를 수행하는 좋은 메커니즘을 제공하지 않습니다. 나는 그것이 이런 종류의 문제를 의도하지 않았다고 가정한다. 또한 전체 코어를 GUI 스레드 전용으로 사용하고 싶지는 않으며, 단지 작업을 수행 할 때 10 %의 <이 필요합니다.
아마도 계산을 병렬 구문을 시작하는 별도의 pthread로 분리하는 것이이 문제를 해결하는 좋은 방법이 될 것이라고 생각했습니다. 이 코드를 컴파일했지만이 버그와 비슷한 pthread에서 호출 할 때 OpenMP 충돌이 발생했습니다 : http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36242. 한 번에 두 개 이상의 스레드에서 병렬 구조를 시작하려고 시도하지 않았 음에 유의하십시오. OpenMP는 프로그램 전체에서 하나의 pthread에서만 사용되었습니다.
OpenMP를 사용하여 동시에 GUI 작업을 예약하거나 pthread를 사용하여 병렬 구성을 동시에 실행할 수없는 것 같습니다. 나는 별도의 스레드에서 GUI 작업을 처리하는 것을 생각하고 있었지만 실제로는 내 경우에보기 흉하고 실제로 사용하는 다양한 라이브러리로 인해 작동하지 않을 수도 있습니다.
여기 텍스트 북 솔루션은 무엇입니까? 다른 사람들이 GUI/네트워킹 등을 동시에 처리해야하는 프로그램에서 OpenMP를 사용했지만 Google이나 OpenMP 포럼을 사용하여 정보를 찾을 수 없었습니다.
감사합니다.
OpenMP를 사용해야합니까? 당신은 모든 것을 위해 pthread를 사용해 볼 수 있으며, "디스플레이"쓰레드와 "계산"쓰레드를 갖는 것은 쉽습니다. –
물론 OpenMP를 사용하는 사람은 아무도 없습니다.하지만이 문제를 해결하고 OpenMP를 그냥 버리고 좀 더 자세한 수동 관리 스레드 풀로 대체하는 방법을 배웁니다. – ASD1