2014-09-25 105 views
0

我使用Ubuntu並編寫了幾行代碼。但它只創建一個線程。當我在我的終端上運行nproc命令時,輸出爲2。我的代碼如下OpenMP只創建一個線程

int nthreads, tid; 

#pragma omp parallel private(tid) 
{ 
    tid = omp_get_thread_num(); 
    printf("Thread = %d\n", tid); 

    /* for only main thread */ 
    if (tid == 0) 
    { 
     nthreads = omp_get_num_threads(); 
     printf("Number of threads = %d\n", nthreads); 
    } 
} 

輸出:

Thread = 0 
Number of threads = 1 

我該怎麼辦並行?

回答

0

如果你正在使用gcc/G ++,你必須確保你能夠openmp擴展與-fopenmp編譯連接選項。在鏈接期間指定它將鏈接到相應的庫(-lgomp)。

編譯的東西,如:

g++ -fopenmp myfile.c -o exec 

或:

g++ -c myfile.c -fopenmp 
g++ -o exec myfile.o -fopenmp 

如果你離開了-fopenmp編譯選項你的程序將編譯,但好像沒有被使用的OpenMP它將運行。如果你的程序不使用omp_set_num_threads設置,他們可以通過命令行來設置線程數:

OMP_NUM_THREADS=8 ./exec 

我覺得默認的一般是內核的特定系統上的號碼。

+1

ok。我明白了。再次敲擊。 – andressophia 2014-09-26 01:43:22

+0

不客氣。很高興你得到它我修改我的答案更多的細節。另外我還提到了OMP_NUM_THREADS環境變量。 – 2014-09-26 01:52:17

+0

我剛試過這些。感謝您的回答。 – andressophia 2014-09-26 02:05:25