簡體   English   中英

為什么POSIX線程比OpenMP慢

[英]Why POSIX Threads are Slower Than OpenMP

我在帶有Xeon處理器的Mac Pro上運行完全並行的矩陣乘法程序。 我創建了8個線程(與核心一樣多的線程),並且沒有共享寫入問題(沒有寫入相同的位置)。 出於某種原因,我使用pthread_createpthread_join速度大約是使用#pragma openmp兩倍。

在任何事情上沒有其他差異......相同的編譯選項,兩種情況下相同的線程數,相同的代碼(顯然除了pragma / pthread部分)等。

循環非常大 - 我沒有並行化小循環。

(我不能真正發布代碼,因為它是學校的工作。)

為什么會發生這種情況? OpenMP不使用POSIX線程嗎? 怎么會更快?

(編輯)你的主要線程是做什么的? 在沒有看到你的代碼的情況下,我猜測主線程實際上幾乎沒有運行,但是當pthreads完成時仍然在吃掉時鍾周期,然后它再次啟動並繼續。 每次給定周期都有暫停/繼續其他線程的開銷。

在OpenMP中,主線程可能會進入休眠狀態,並在並行區域完成時等待喚醒事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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