Thursday, 15 July 2010

gcc の最適化

なんか、-O9 すると出ると言う bug と格闘中。
gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)
です。


まず、最適化をかけると、

Breakpoint 1, SchedTaskArray::next (this=<value optimized out>, scheduler=0x1baf0,
p=<value optimized out>) at Cell/spe/SchedTaskArray.cc:161

ってな状態に。もちろん、value optimized out されたものはgdbからは見れない。

さすがに break point がかけられないってのは、なくなったみたい。

最適化をかけなければ、ちゃんと動くので、最適化なしでdebugってのはダメ。

gcc のコンパイルのバグってのもありあり。実際、中間変数に取っておくってので、最適化すると、なんか別物を取ってきてしまうってのを目撃しました。この手のものは bug report しにくい。それに、report しても、「新しいのでは治ってます」ってのが多いし。

このレベルになると、cpu の数が6個の時だけバグるとか、もう楽しすぎです。たぶん、タスクの数が変わるので、タスクを渡す配列の境目とかで異常が出ているんだと思う。その判定部分が最適化レベルによって振舞が異なるんでしょう。

「センセー、動きません」でおわちゃうので、自分でやるしかないみたいです〜

こういうことしなくないから、プログラミング言語の研究とかやっているのに、本末転倒っぽいっていうか、本道って言うか、自分で何とかしろっていうか...

でも、なんか楽しいです。

No comments: