2017-01-16 1 views
0

요즘 OpenMP를 배우고 있습니다. 인터넷에서 많은 블로그를 읽었으며 "루프 병렬화의 스레드 수"에 대해 매우 자주 의심하고 있습니다. 아래 예제를 사용하십시오C에서 OpenMP를 사용하는 루프 병렬화의 스레드 수

int x,y; 
#pragma omp parallel for private(y) 
for(x=0; x < width; x++) 
{ 
    for(y=0; y < height; y++) 
    { 
     finalImage[x][y] = RenderPixel(x,y, &sceneData); 
    } 
} 

이 예제에서는 병렬화에 사용되는 스레드 수입니다. 그것은 표준 방법인가요? 아니면 명시 적으로 스레드 수를 말해야합니까?

+0

여부처럼 실행할 수있는 스레드의 특정 수의 (여기 2)와 함께 프로그램을 실행하기 위해 다음과 같은

#pragma omp parallel private(tid) { tid=omp_get_thread_num(); if(tid==0){ nthreads=omp_get_num_threads(); printf("Number of threads = %d\n",nthreads); } 

같은 스레드의 수를 인쇄 할 수 있습니다 당신은 특정 수의 쓰레드가 강제로 사용되도록하거나 openmp가 그것을 결정하도록 할 것입니다. 그것은 ... omp_get_num_threads()에 의해 항상 쓰레드의 수를 문의 할 수 있습니다 –

+0

특정 쓰레드 수 그럼 내가 생각하고있는 요소는 무엇인가? 예, 내 시스템에 2 개의 코어가있는 프로세서가 있다고 가정하면 스레드 수를 2로 제한합니까? – DeoChandra

+0

실제 코어 수는 스레드 수를 제한하지 않습니다. 2 중핵 기계에, 당신은 4 개의 실을 가질 수있다, 그러나 당신은 그 실이 모든 중핵을 점유 할 것이라는 점을 결코 보증되지 않는다. 쓰레드는 논리적 인 엔티티입니다. 그래서 하나의 코어에서 모두 실행되는 네 개의 쓰레드로 끝날 수 있습니다. –

답변

0

OPENMP는 자동으로 사용 가능한 스레드 수를 지정해야합니다. 당신은 bash는 다음과 같은

OMP_NUM_THREADS=2 ./program