연구를 위해서 프로그램 개발 중인데, 멀티 프로세서를 이용해서 여러 실험을 동시에 돌려야 합니다.
처음엔 자바에서 멀티 스레드로 처리 했는데, 좀 더 실험 속도를 올리려고 C++로 다시 만들었어요
C++는 OpenMP를 이용하면 멀티코어를 쓸 수 있다고 해서 OpenMP 루프 병렬화로 개발을 완료 했습니다.
그런데 스레드 수를 늘리면 늘릴수록 각 루프가 배로 느려지네요 ㅠㅠ CPU 사용량 보면 코어 배분도 잘 되는거 같은데
스레드 수 1개
16개
각 쓰레드 끼리 읽기 위해 공유되는 리소스는 있지만 공유 자원을 업데이트 하진 않아요. 그래서 세마포어같은것도 사용하지 않았습니다.
병렬 처리 성능을 떨어뜨리는 요인이 공유 자원 말고 또 뭐가 있을까요??
자바로 만들었을 땐 스레드 수에 따라서 느려지는 일은 없었는데 C++ 정말 머리 아프네요