* あああ * 「数独の高速化」の見にくい表を直す -(by [[K]], 2022.07.01) ** 「数独の高速化」の見にくい表を直す ** (1) -https://blog.cybozu.io/entry/1692 -表1 環境 Windows7 Professional 64bit版 Core i7-2600 @ 3.40GHz 単位は秒 それぞれ sudoku* q_kawai.txt -1 の実行時間を表しています gcc 3.4.5 gcc 4.7.2 VC++2010 sudoku0 1960.5 1190.5 1247.8 C++でできるだけ簡潔に書いたもの sudoku1 1628.8 1052.2 1249.7 常識的な範囲で最適化したもの sudoku2 855.7 710.3 682.5 さらにループ展開したもの sudoku3 728.3 674.1 536.3 switch-caseの乱用 sudoku4 327.2 count()等をアセンブラ化 最適化オプションは次の通りです gcc 3.4.5 : -O2 のみ(-O3だとかえって遅くなったので) 32bitコードを生成させています gcc 4.7.2 : -O3 -mtune=corei7 -march=corei7 これも32bitコードを生成させています(ミスです) VC++2010 : /Ox /Oi /Ot /Oy /favor:INTEL64 /GA (正確なバージョン: 16.00.40219.01 for x64) -表2 gcc 4.6.3(linux), VC2012(win7), icl 12.0(win7) オプション: g++ -Ofast -DNDEBUG -fomit-frame-pointer -march=native -msse4 cl /Ox /Oi /Ot /Oy /favor:INTEL64 /GA icl /fast /EHs /DNDEBUG sudoku2.cpp /Qunroll-aggressive 環境: sandy-bridge i7-2600 3.4GHz g++のみWin7上のVMware上のlinuxで実行 VC, iclはnative実行 icc vc gcc sudoku2 q_kawai.txt 20000000 10.048 10.982 10.710 sudoku3 q_kawai.txt 20000000 9.144 8.69 9.68 → profile optimization 8.364 8.3 7.580 sudoku3 q_kawai.txt 20000000 9.144 8.69 9.68 → profile optimization 8.364 8.3 7.580 (↓これはビルドしなおすことなく実行・比較用) sudoku4 q_kawai.txt 20000000 5.119