簡體   English   中英

為什么OpenMP程序只在一個線程中運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM