さてさて、ゴールデンウィークののほほん生活もあと2日。残りわずかになってきました。今日はお勉強で、Intel Threading Building Blocks(TBB)の本を読んでいました。
TBBはC++用の並列計算用テンプレートライブラリ(STLみたいなやつ)で、呼んでいる本は「インテル スレッディング・ビルディング・ブロック マルチコア時代のC++並列プログラミング」(オライリージャパン社)という並列計算のノウハウをまとめた本です。本の執筆はIntel社のディレクター(日本でいうと部長)が書いています。
本を片手にC++コードを書いて動かすわけですが・・・。デュアルコアレベルでは大して早くならないのか、お試しでつくったコードの処理自体が軽すぎるのかで、シングルスレッドで動作する素直なコードの方が早かったです。粒度(GRAINSIZE)の設定をいじるとシングルスレッドの素直なコードと同じくらいの速度になったのでparallel_なんとか系は粒度の設定が鍵を握りそうな感じです。
この本は、そのほかにマルチスレッドで処理する上で必須な排他制御やアロケート、処理分割の方法など、並列計算処理を作成するにあたってボトルネックになりうる部分をいかに回避するかが処理を高速化するために必要であると述べているように感じました。結構ボトルネックになる部分が多くて、単純にマルチスレッドにすれば早くなるというのはまやかしであることを裏付けています。
この本のタイトルからしてTBBがいかによいかを説明するかのように思えますが、さすがはオライリーで出版するだけあって、「このライブラリも並列化で高速処理するための1つの手段であるため、別の手段がある場合はその方法も検討してください」といった内容がちゃんと書かれています。 TBBライブラリの基本構想的な話を元に解説がなされているため、スレッドを使ったプログラミングの基礎を知らない人が読み進めるにはちょっと厳しいと思います。
まだ読みかけではありますが、ライブラリの解説というより、並列化するためのノウハウの解説をきちんとしているので、これからの時代にシステム開発を行う人にとってはよい本であると思います。オライリーの本は分厚くてとっつきにくいですが、これは読んで内容を理解できれば今後非常に強い武器になると思います。