[英]STL algorithms and concurrent programming
如果我為我的編譯器啟用OpenMP,是否可以並行執行任何STL算法/容器操作,如std :: fill , std :: transform ? 我目前正在與MSVC 2008合作。 或者也許有其他方法使它並發?
謝謝。
有許多項目旨在擁有並行的STL類型庫:
為了保證std::transform
和std::fill
是並行安全的,你必須編寫自己的版本。 這些函數的通用實現是順序執行。
讓我們把std::fill
作為一個簡單的例子。 在轉換為並行時,您需要將函數分解為可以異步執行而沒有任何相互依賴性的較小函數。 例如,一個子功能可以填充前半部分,第二個子功能可以填充后半部分。 父函數必須委托(fork)兩個子函數,並等待它們完成(join)。
更大的問題是在並行執行的運行時准備中花費的開銷是否可以彌補實際的並行執行時間。 大填充比小填充有更高的理由。
也許更好的想法是制作這些函數的線程安全版本並讓線程並行執行,而不是拆分函數。
在將事物分成多個線程之前,首先嘗試參考數據進行優化。 在網上搜索面向數據的設計 。 文章表明,通過優化執行來減少處理器緩存未命中,程序可以更快地運行。
Visual Studio 2010提供了並行模式庫 ,它具有並行執行的STL樣式算法。 當然,這是針對VS2010的微軟特有的(我猜)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.