2016-12-28 405 views
0

OpenMP中定義的內核數量如何,此API如何知道核心的存在。OpenMP如何確定系統中的核心數量?

+0

@zulan我檢查過,但它說nthreads-var的默認值是1,但核心數量通常大於1。所以這是否意味着它與no沒有關係。核心? –

+0

它在哪裏說的? OpenMP標準4.5在2.3.2中說默認是* implementation defined *。 – Zulan

回答

3

OpenMP定義了一個內部控制變量(ICV)nthreads-var,它基本上控制了一個並行區域的線程數。

nthreads-var(如果未由環境變量OMP_NUM_THREADS定義)的初始值是實現定義的。內核的數量看起來像是一個合理的默認設置。 GCCs(libgomp)爲BSD,Linux,mingw32,POSIX,rtems在gomp_init_num_threads中實現它。您可以查看libgomp/config/<platform>/proc.c下的具體實現。

Linux通過pthread_getaffinity_np檢查線程關係,並將線程數設置爲允許進程運行的CPU數。 MinGW同樣通過GetProcessAffinityMask。其餘平臺基本上使用sysconf(_SC_NPROCESSORS_ONLN)

+1

OpenMP確實在OpenMP 4.0+的線程放置API中具有核心概念。 Linux上的GCC和Intel OpenMP運行時分析'sysfs'中的CPU條目,以便找出拓撲信息。 –

+0

@HristoIliev好點。我認爲OP對於我試圖解決的OpenMP線程有一些更基本的誤解。編輯答案在技術上更加正確。 – Zulan