スレッド数

計算中心のタスクをマルチスレッド化する時に,スレッド数=プロセッサ数にするか,スレッド数=プロセッサ数-1(←弱気(笑))にするか悩んでいた.
そこで,2CPU×4コアのマシンである行列計算を簡単に実行してみたところ,逐次処理の場合は133,322ミリ秒掛かっていたが,マルチスレッド化してプロセッサ数-1だと31,621秒,プロセッサ数だと30,524秒だった.実はこの時AOL Radio(笑)やSafariFirefoxなどの他のプログラムがいくつもバックグラウンドで動いている状態だった.
昔は1CPUのマシンで計算中心の無限ループに近い処理を実行すると端末入力を受け付けなくなることもあったし,初期のマルチプロセッサマシンのOSは非対称型マルチプロセッシング(OSが一つプロセッサを占有する形態)だったりもしたが,今はかなり改良が進み,普通にスレッド数=プロセッサ数にしても大丈夫そうである.他のプログラムがいろいろ動いた状態でも性能が向上し,なにしろ音楽も途切れないのだから(笑)
追記:次の記事によると,アップルの並列化の試みも面白そうだ.
「Snow Leopard」が持つ技術--マルチコアの真価を引き出すためにCNET Japan