0
我試圖使用英特爾TBB並行內部循環(3的第二)但是,當內部2循環的大小顯着時,我只得到體面的回報。C++英特爾TBB內部環路優化
TBB是否爲主循環的每次迭代產生新線程? 是否有減少開銷?
tbb::task_scheduler_init tbb_init(4); //I have 4 cores
tbb::blocked_range<size_t> blk_rng(0, crs_.y_sz, crs_.y_sz/4);
boost::chrono::system_clock::time_point start =boost::chrono::system_clock::now();
for(unsigned i=0; i!=5000; ++i)
{
tbb::parallel_for(blk_rng,
[&](const tbb::blocked_range<size_t>& br)->void
{
:::
注意openMP(我試圖刪除!!!)沒有這個問題可能很有趣。
我與編譯:
英特爾ICC 12.1在-03 -xHost -mavx
在一個英特爾2500K(4個核)
編輯:我真的可以改變循環的順序,因爲out循環測試需要用基於循環結果的謂詞來替換。
看來你要求它產生5000次並行工作,這是否準確? – user7116 2012-02-15 19:30:04
@sletterlettervariables是的,我用openMP獲得了很大的收益,我想知道是否可以使用TBB – 111111 2012-02-15 19:58:25
嘗試使用tbb中的分區程序來複制這樣的增益,尤其是affinity_partiioner(如果沒有)。 OpenMP固定分區真的很適合小內部循環,因爲它適用於線程團隊的策略... – Rick 2012-02-15 22:15:30