pthread + gcc + sse 問題解決

by syoyo

以前、linux + gcc にて SSE と pthread を同時に使うと、
スレッド関数内での SSE ローカル変数が 16 byte アラインされないという問題

http://lucille.sourceforge.net/blog/archives/000308.html

がありましたが、これは実際には glibc のバグで、最新の glibc では fix されています。

たぶん bug ID 723 のバグです。
http://sources.redhat.com/bugzilla/show_bug.cgi?id=723

glibc 2.3 系では修正されているようです。
ためしに glibc 2.3.2 の環境で再度テストプログラムを実行してみましたが、
ちゃんと 16 byte アラインされていました。問題なさそうです。

SSE 演算に使うローカル変数は全部動的確保かスタティック領域に
作るように書き直さないといけないのかなー、めんどうだなー、と
思っていたのですが、時が解決してくれました。

SSE と pthread(実際には clone() or linuxthread) を同時に使う場合は、
glibc 2.3 以上を使うほうがよさそうです。

最近ついにデュアルコアのプロセッサが市場に出回りはじめました。
これからのパソコンのトレンドである多数コアプロセッサ
の始まりではないでしょうか( +64 bit 化も)。

これからはレンダラもそうですが、プログラムのマルチスレッド化
がより重要になってくると思います。

大域照明機能をつかわなければ、バケット単位で十分な並列度が
出ていると思われる prman でさえ、時期パージョン(version 13)では
ついに(というかやっと?)マルチスレッド化になるとのことです。

Advertisements