アカウント名:
パスワード:
DWORD dwBegin = GetTickCount( ) ; int a = 0, b = 0, c = 0 ; int a1 = 1, b1 = 1, c1 = 1 ; for ( int i = 0; i < 100000000; i ++ ) { a += a1 ; // b += b1 ; // c += c1 ; } DWORD dwEnd = GetTickCount( ) ; printf( "%d [ms]\n", dwEnd - dwBegin ) ;
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲを呼ぶ -- ある傍観者
今どきのコンパイラなら (スコア:0)
どんな最適化オプションでコンパイルしたのか全く書かれていませんけど。
Re: (スコア:1)
a += b ;
a += b ;
というコードがあったとして、どのように最適化されるというのですか?
依存性と最適化は関係ありませんよ。
(ループや演算そのものが削除されたりすることはあるかもしれませんが、依存性のあるコードはどんなに最適化されてもa+=bが並列に実行されることはありません)
Re:今どきのコンパイラなら (スコア:1)
コメントアウトしている部分を消していったとき、どんな値が表示されるか実際に試してみるといいと思います。
(ただし、ループの部分が最適化で消えてしまわないようにして)
演算量が倍になっても1割程度しか速度は遅くならないはずです。
(しかし、3倍になるとコードの状態によってはかなり遅くなるかも。これは演算命令だけではなく、mov命令も含めて同時に3つまでしか発行できないためでしょう。アセンブラでループの中を書くとよりはっきりします)
Re:今どきのコンパイラなら (スコア:1)
誤解のないように修正。
コメントアウト(行頭の'//')を外していったら、という意図です。