2017-08-04 349 views
0

我是並行編程的新手,想知道我可以啓動的最大線程數是多少。openMp中的最大線程數

我想這

#include<stdio.h> 
#include<omp.h> 
void pooh(int id,int a[]) 
{ 
    a[id]=a[id]-1 ; 
    printf("%d\n",id) ; 
} 
int main() 
{ 
    int a[1001] ; 
    int i ; 
    for(i=0;i<1000;i++) 
    { 
     a[i]=i+1 ; 
    } 
    omp_set_num_threads(1000) ; 
    #pragma omp parallel 
    { 
     int id=omp_get_thread_num() ; 
     pooh(id,a) ; 
    } 

    return 0 ; 
} 

但是當我試圖OMP_SET_NUM_THREADS(10000); 該程序不運行。我想知道可以啓動以完成工作的最大線程數。

+0

不確定這種方法是非常明智的,但你可以嘗試一個二進制搜索 - 嘗試500然後250然後125,直到它工作。然後你會知道該數字的最低和最高界限,然後再開始將該間隔再分成一半。 –

回答

1

您需要從您的問題陳述中瞭解兩個方面。要直接回答您的問題,建議設置的最大線程數是核心*超線程數。否則,線程只是等待資源。這通常是2,4,8,16 ......並且幾乎從不1000,除非你計劃在英特爾GPU上使用它。

第二個方面是我建議你改變你的實施策略。看一看: #pragma omp parallel for

還是自己劃分的工作量,但你爲什麼要這麼做(除非爲大專分配或東西)時omp可以自動完成它。

+0

我可以在openMP環境中使用英特爾GPU嗎? 如果我有4個核心,這意味着最大不是。我應該使用的線程是4.因此,我需要將問題分爲四部分嗎? – Hotspur

+0

我會建議使用pragma – itsnevertoobadtoaskforhelp

1

問題:您可以創建的最大線程數取決於您的系統。在Linux中,您可以使用cat /proc/sys/kernel/threads-max (請參閱,例如,Maximum number of threads per process in Linux?)找到此信息。

我認爲你需要知道的是什麼:但是,這不是你想要的,因爲這會讓你的系統完全超載。作爲一個經驗法則,您不應該超過系統中可用處理器的數量。您可以在Linux中使用nproc來查找此內容(請參閱,例如,How to obtain the number of CPUs/cores in Linux from the command line?)。

使用多於您系統中可用的處理器數量將使您的應用程序運行速度較慢