![](/img/trans.png)
[英]Externally called OpenMP program runs with only one thread if called by another OpenMP program
[英]Why OpenMP program runs only in one thread
我剛用一個簡單的c程序嘗試過OpenMP
test() {
for(int i=0;i<100000000;i++);
}
main() {
printf("Num of CPU: %d\n", omp_get_num_procs());
#pragma omp parallel for num_threads(4)
for(int i=0;i<100;i++) test();
}
用g++ -fopenmp
編譯。 它可以正確打印出我有4個CPU,但所有測試功能都在thread 0
上運行。
我試圖修改OMP_NUM_THREADS
。 但它也沒有效果。
我有一切與在線示例相同,但為什么我不能讓它工作?
你的問題在這里:
#pragma omp parallel for num_thread(4) <---
正確的子句是num_threads(4)
,而不是num_thread(4)
。 忽略不正確的openmp pragma,因此您最終得到了一個順序程序。 :)
我很驚訝你沒有得到編譯器警告,因為我做到了。
我在visual studio中遇到了這個問題,最后我明白我忘了在visual studio中啟用Open MP支持。 它沒有給我任何錯誤,只是為一個線程執行程序
在調用omp parallel節之前使用函數omp_set_num_threads(4)。
另外,你如何確定線程數? 將printfs嵌入關鍵部分只是為了確保所有內容都被打印出來。
當我使用C代碼擴展numpy模塊時,我在我的ubuntu桌面上遇到了同樣的情況。 openmp只用一個線程運行。 我碰巧刪除了libopenblas-base並安裝了libatlas-base-dev。(以處理numpy安裝問題)然后多線程openmp回來了:)
我在一個64核的ubuntu服務器上進行了測試,它就像我的桌面一樣! 我認為這是因為libopenblas與圖書館之類的圖書館發生沖突。
首先選擇項目_>屬性 - > c / c ++ - >語言 - >打開mp支持 - >選擇是,然后你會發現上面的一致性模式(沒有)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.