インテル®TBBを使用してインナー・ループ(2番目の3番目)を並列化しようとしていますが、インナー2ループのサイズが重要な場合には、C++ intel 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のは、この問題を持っていないことに注意することは興味深いかもしれません。
私がコンパイルしています:インテル2500K(4つのコア)
EDITで-03 -xHost -mavx
で
インテルICC 12.1:私は本当に、ループの順序を変更することができ、アウトループテストはループ結果に基づく述語で置き換える必要があるためです。
これは、並列の作品を5000回生成するよう求めているようですが、それは正確ですか? – user7116
@sixlettervariablesはい、私はopenMPで大きな利益を得ました。私はTBBでこのような利益を再現できるかどうかを知りたいと思います。 – 111111
tbbのパーティショナーを使用してください。特にそうでない場合はaffinity_partiionerを使用してください。 OpenMP固定パーティショニングは、スレッドチームに適用されるポリシーのため、小さな内部ループでは本当にうまくいきます。 – Rick