Cilk Plus는 Intel의 Cilk 구현입니다. 둘 다 다중 스레드 환경입니다. 즉, 실행 중에 여러 스레드가 생성됩니다.
병렬 프로그래밍을 처음 접했을 경우 이미 개발 된 순차 코드를보다 쉽게 병렬화 할 수 있으므로 OpenMP가 더 좋을 것입니다. 이미 코드의 순차적 인 버전이 있습니까?
OpenMP는 컴파일러가 병렬로 실행해야하는 코드 부분을 지시하기 위해 pragma를 사용합니다.
#pragma omp parallel for firstprivate(array_of_bloom_filters)
for i in DATA:
check(i,array_of_bloom_filters);
다른 꽃 필터의 인스턴스 데이터가 스레드간에 공유되는 동안 경합을 피하기 위해 모든 스레드에서 복제 : 나는 당신의 문제를 이해한다면 제대로 당신은 아마 이런 식으로 뭔가를해야합니다.
업데이트 : 용지 실제로 매우 불균형 애플리케이션, 즉, (다른 스레드에 할당 된) 다른 TAKS 매우 다른 작업 부하에서 발생할 수를 고려한다. 앞서 언급 한 논문을 인용하면 "스케줄링에 어려움을주는 고도로 불균형 한 작업 그래프, 로드 밸런싱, 종료 감지 및 작업 조율 전략"이 있습니다. 스레드간에 계산의 균형을 유지하려면 작업 크기를 줄여서 동기화에 소요되는 시간을 늘려야합니다. 즉, 항상 좋은 부하 분산이 비용으로 발생합니다. 귀하의 문제에 대한 설명은 자세하게 설명되어 있지 않지만 귀하가 가진 문제는 상당히 균형이 잡혀있는 것으로 보입니다. 이것이 사실이 아니라면, Cilk을 위해 가십시오, 그것의 work stealing approach는 아마도 아마도 언밸런스 워크로드를위한 최상의 솔루션입니다.
내가 찾고있는 것이 효율성이므로 어느 쪽이 더 낫다. 나는이 논문 (www.cs.unc.edu/~prins/RecentPubs/ijpp10.pdf)을 참조했으며 OpenMP가 느리다는 견해를 갖고있다. 그래서 나는 플러스를 선택했다. 이에 대한 의견이 있으십니까? –
나는 내 대답을 편집했다. – igon
예, 저는 또한 제가 작업하고있는 문제가 공정하게 균형 잡혀 있다고 생각합니다. 내가 틀렸다고 정정하십시오 : 공정하게 균형 잡힌 프로세스의 경우 OpenMP와 cilk가 비슷한 결과를 나타냅니다. 성능면에서 우리는 주어진 패키지 중 하나를 선택할 수 있습니다. –