는 예를 들어, 병렬에 대한 루프 구현이 있다고 가정 ConcRT parallel_for, 모든 작업을 하나의 루프 본문에 넣는 것이 좋습니다.최적의 크기는
for(size_t i = 0; i < size(); ++i)
{
DoSomething(a[i], b[i]);
}
for(size_t i = 0; i < size(); ++i)
{
DoSomethingElse(a[i], b[i]);
}
for(size_t i = 0; i < size(); ++i)
{
DoSomething(a[i], b[i]);
DoSomethingElse(a[i], b[i]);
}
갈 수있는 확실한 방법이 될 것입니다 두 번째 변종에 비해
하지만 처리 병렬 때있을 수있는 다른 고려 사항 :
다음 예제를 타고?난 그냥 경우 옵션 1 (~ 평균 38ms 30ms의에) 빨리 두 번째보다 더 parallel_for 년대에 있었다했다. 하지만 병렬 알고리즘을 벤치마킹하는 데는 좋지 않습니다. 따라서 잘못 측정 한 것일 수 있습니다. 어쨌든 불행히도이 관찰을 위해 실제 코드 예제를 게시 할 수 없습니다.
은 추가 고려 엄지 손가락의 몇 가지 규칙이 있습니까하거나 시도하고 벤치 마크?
나는, 두 번째 옵션은 더 나은 지역을 가지고 생각합니다. – Elazar
컴파일러를 추측하려는 것 같습니다. 문제는 컴파일러에 따라 다르며 특히 최적화 수준에 달려 있습니다. 일부 컴파일러는 두 번째 예제에서 병렬 처리 기회를 인식 할만큼 충분히 똑똑 할 수 있습니다. 컴파일러와 병렬 코드 조각을 인식하는 방법에 대해 자세히 연구하십시오. 아마도'#pragma'가 관련되었을 것입니까? –
관련 : http://stackoverflow.com/questions/8547778/why-is-one-loop-so-much-slower-than-two-loops/8547993#8547993 – inf