僕の過去ツイートの話ですね。

ソフトウェアに限らずパイプライン処理を組むと処理がステップごとに並列化できて、皆さんお使いのCPUのALUの内部では10段以上のハードウェアパイプラインが組まれている事が普通です。

ソフトウェアパイプラインというのは例えばとても計算量が重くデータ並列性の低い処理があってもA→B→C→Dという4ステップに分割できたのなら4コアのCPUでコア1がA担当、コア2がB担当、コア3がC担当、コア4がD担当という形にしてやってくるデータをバケツリレーしながらステップごとに担当を分ける事で定常的にデータがやってくる限り4つのコアの計算力をフルに活用した処理ができるので1コアでやるより4倍のスループットが出るようになります。基本的には段数を増やすほどに並列度は上がるのでスループットの増大も期待できます。

そしてここからが面白いのですが、大抵のケースではそんな簡単にスループットは上がりません。というのもCPUのキャッシュというのは実は直感の数倍速くて、CPU間のデータ通信は直感の数倍遅いからです。ナイーブにソフトウェアパイプラインを実装すると通信のオーバーヘッドが並列化の利得を上回ってしまってトータルでは性能が落ちてしまうということはザラで、どの程度の粒度のパイプラインに分割すると性能が最大化できるかというのはいろんな要素で変動する読みにくいパラメータです。

クラウドが一般的になった現在、クラウドで使える仮想マシンには200Gbpsとか出るすごいNICがつながっています。

Specifications for Amazon EC2 high-performance computing instances - Amazon EC2

Detailed specifications for Amazon EC2 high-performance computing instance types

docs.aws.amazon.com

https://docs.aws.amazon.com/ec2/latest/instancetypes/hpc.html#hpc_network

これほどの帯域があればソフトウェアパイプラインを組む際のスイートスポットも変わってくるんだろうなという気持ちで眺めています。

2か月

利用規約プライバシーポリシーに同意の上ご利用ください

熊崎 宏樹さんの過去の回答
    Loading...