[英]Why POSIX Threads are Slower Than OpenMP
我在帶有Xeon處理器的Mac Pro上運行完全並行的矩陣乘法程序。 我創建了8個線程(與核心一樣多的線程),並且沒有共享寫入問題(沒有寫入相同的位置)。 出於某種原因,我使用pthread_create
和pthread_join
速度大約是使用#pragma openmp
兩倍。
在任何事情上沒有其他差異......相同的編譯選項,兩種情況下相同的線程數,相同的代碼(顯然除了pragma / pthread
部分)等。
循環非常大 - 我沒有並行化小循環。
(我不能真正發布代碼,因為它是學校的工作。)
為什么會發生這種情況? OpenMP不使用POSIX線程嗎? 怎么會更快?
(編輯)你的主要線程是做什么的? 在沒有看到你的代碼的情況下,我猜測主線程實際上幾乎沒有運行,但是當pthreads完成時仍然在吃掉時鍾周期,然后它再次啟動並繼續。 每次給定周期都有暫停/繼續其他線程的開銷。
在OpenMP中,主線程可能會進入休眠狀態,並在並行區域完成時等待喚醒事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.