インテルスレッディング・ビルディング・ブロックのtbb::scalable_allocator
は実際に何をしていますか?インテルTBBのスケーラブル・アロケータはどのように機能しますか?
確かに効果的です。私はちょうどstd::vector<T>
をstd::vector<T,tbb::scalable_allocator<T> >
に変更することで、アプリの実行時間を25%短縮しました(そして、4コアシステムではCPU使用率が200%から350%に上昇するのを見ています)。一方、別のアプリで私はそれがすでに大きなメモリ消費量を倍増し、都市を交換するために物事を送信することを見てきました。
インテル独自のドキュメントではあまり意味がありません(たとえば、FAQの最後の短いセクション)。誰かが自分のコードに自分自身を掘り起こす前に、どんなトリックを使うのか教えてもらえますか?
UPDATE:初めてTBB 3.0を使用し、scalable_allocatorから私の最高のスピードアップを見ました。 vector<int>
をvector<int,scalable_allocator<int> >
に変更すると、実行時間が85秒から35秒に短縮されました(Debian Lenny、Core2、テストではTBB 3.0)。
ありがとうございます!記事には、私が探していた種類の情報が含まれています。 – timday
元のリンクは現在無効ですが、CiteSeerにPDFがあります:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.71.8289 –
データポイントを追加するには:私の特定のアプリでは、アロケータの競合すべてのスピードアップを殺すことを約15スレッド後にはスピードアップを停止し、40スレッドではシングルスレッドよりもはるかに遅くなります。 'scalable_allocator'がスレッド単位のカーネル内で使われているので、ボトルネックがなくなり、スケーリングが戻ってきました。 (マシンには40個の物理コアがあります)。 – Adam