簡體   English   中英

omp_set_num_threads(1)慢於沒有openmp的原因

[英]Reasons for omp_set_num_threads(1) slower than no openmp

我相信每個人都同意該職位的標題。 有人可以指出原因嗎? 對像書之類的東西有什么參考嗎? 我試圖找到但沒有運氣。

我相信原因是關於openmp的事情,它具有同步開銷,這是openmp項目所沒有的。

希望有人可以進一步擴大原因?

謝謝

盡管僅使用一個線程就使用OpenMP在運行時會產生一些開銷,但更重要的問題很可能是編譯器必須執行的代碼轉換才能生成OpenMP代碼(特別是將並行區域代碼概述為單獨的函數[由gcc和icc完成; PGI有所不同...])將影響其他代碼優化(例如矢量化)。 當在概述的函數中執行部分代碼時,編譯器在允許優化的單個函數中擁有的信息可能會丟失,因此生成的代碼可能會更糟。

正如Mystical解釋的那樣,這很可能是由於OpenMP開銷。 我嘗試通過例如以下方式解決此問題:

#pragma omp parallel for if(nthreads>1)

我以為如果nthreads> 1,這只會使用OpenMP開銷。 但是,至少在Visual Studio 2012中,這也有很大的開銷。 因此,為了正確比較函數的單線程和多線程版本,我定義了帶有和不帶有OpenMP編譯指示的函數的兩個版本。

暫無
暫無

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

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