2007/11/27
プログラマの開発環境
メモリの価格が急激に下がっているそうです。
そんな話をしていたら、タイミングよく PC Watch に記事が掲載されて
いました。
・元麻布春男の週刊PCホットライン 1GB=2,000円時代のメモリ増設を考える(上)
バルクであれば 2GB のメモリが 4980円程度!
この間買ったばかりの 1GB メモリは 2枚で7000円くらいでした。
つい先日まで 1GB ×4 で喜んでいたのに、今なら 2GB×4 の 8GB RAM
だって十分現実的です。
まだ Quad では試せていませんが、最近試していた Multi Core による
build 時間の短縮も効果がありました。PC の性能向上は速くていつも
驚かされます。
Multi Core CPU や 64bit OS に大容量メモリなど、プログラミング環境
としてより速い PC を求めることに説得力が出てきました。
使い方次第ではありますが速さは作業効率の向上につながります。
ところがプログラマ用 PC の性能向上を妨げるものは、会社の予算でも、
上司の許可でもなく、プログラマ自身であることがあります。
せっかく PC をもっと良いものに交換しようと持ちかけても、
環境構築が面倒だからいらない、という人は思ったよりたくさんいます。
もちろんプロジェクトの終盤とか大事な時期とか、変えてはいけない時も
あります。だけどそうでなくても、環境再構築や OS の入れ替え、
PC の引越しをかなり面倒だと考える人は多いようです。
よほど困っている場合を除いて、意外にも現状で満足してしまうようです。
私は仕事柄ビデオカードテスト用にマシンを用意したり、各種 OS を
入れたり、またはスタッフ用に PC を準備したりと、
何度も何度も PC のセットアップすることが多いです。
そのため自然に再セットアップの最小手段を準備しておくようになりました。
コピーすべきデータを常に分けておいたり、最低限必要なアプリケーション
や設定など、自分の PC にするための手順を把握しています。
エデイタやシェルなど基本的な設定ファイルや環境は Subversion に全部
入れてしまっています。新しい PC 上でも checkout すればすぐ使え、
設定を変えても複数の PC 間で同期を取ることも容易です。
最初に書き換えるレジストリなども reg ファイルにして、同じように
svn に入れてしまっています。
環境の再構築で時間をとられるのはほんの一時的ですが、build 時間など
作業効率はその後長く影響し続けます。
これはチーム全体の効率にかかわってきます。
より速い環境へと PC を自在に渡り歩くスキルも、これから
必要になってくるのかもしれません。
そんな話をしていたら、タイミングよく PC Watch に記事が掲載されて
いました。
・元麻布春男の週刊PCホットライン 1GB=2,000円時代のメモリ増設を考える(上)
バルクであれば 2GB のメモリが 4980円程度!
この間買ったばかりの 1GB メモリは 2枚で7000円くらいでした。
つい先日まで 1GB ×4 で喜んでいたのに、今なら 2GB×4 の 8GB RAM
だって十分現実的です。
まだ Quad では試せていませんが、最近試していた Multi Core による
build 時間の短縮も効果がありました。PC の性能向上は速くていつも
驚かされます。
Multi Core CPU や 64bit OS に大容量メモリなど、プログラミング環境
としてより速い PC を求めることに説得力が出てきました。
使い方次第ではありますが速さは作業効率の向上につながります。
ところがプログラマ用 PC の性能向上を妨げるものは、会社の予算でも、
上司の許可でもなく、プログラマ自身であることがあります。
せっかく PC をもっと良いものに交換しようと持ちかけても、
環境構築が面倒だからいらない、という人は思ったよりたくさんいます。
もちろんプロジェクトの終盤とか大事な時期とか、変えてはいけない時も
あります。だけどそうでなくても、環境再構築や OS の入れ替え、
PC の引越しをかなり面倒だと考える人は多いようです。
よほど困っている場合を除いて、意外にも現状で満足してしまうようです。
私は仕事柄ビデオカードテスト用にマシンを用意したり、各種 OS を
入れたり、またはスタッフ用に PC を準備したりと、
何度も何度も PC のセットアップすることが多いです。
そのため自然に再セットアップの最小手段を準備しておくようになりました。
コピーすべきデータを常に分けておいたり、最低限必要なアプリケーション
や設定など、自分の PC にするための手順を把握しています。
エデイタやシェルなど基本的な設定ファイルや環境は Subversion に全部
入れてしまっています。新しい PC 上でも checkout すればすぐ使え、
設定を変えても複数の PC 間で同期を取ることも容易です。
最初に書き換えるレジストリなども reg ファイルにして、同じように
svn に入れてしまっています。
環境の再構築で時間をとられるのはほんの一時的ですが、build 時間など
作業効率はその後長く影響し続けます。
これはチーム全体の効率にかかわってきます。
より速い環境へと PC を自在に渡り歩くスキルも、これから
必要になってくるのかもしれません。
2007/11/26
Visual Studio 2008 IDE で MP を使う
連休明けて、引き続き VS2008 です。
今度は IDE 上での MP Build を試しています。
ソース単位で並列にコンパイルできます。
Project の Property から下記の設定をしています。
C/C++ → Code Generation
Enable Minimal Rebuild が「Yes (/Gm)」になっていたら「No」へ
(他にも /MP 非互換オプションがあればはずす必要あり)
C/C++ → Command Line
Additional options: に「/MP4」を追加
・Pentium4 3.6GHz×2×HT (=4) での比較
(MP無し) 52秒→28秒 (/MP4)
・Core2 Duo 2.4GHz での比較
(MP無し) 30秒→18秒 (/MP2)
厳密な条件ではないですが、VS IDE 上でも簡単に試すことができました。
Makefile で依存関係を記述すると 1ファイル単位のコンパイルになって
しまうので、/MP 指定もあまり有効に活用されません。
こちらの方が簡単に結果を出せるようです。
ソースファイル 12本ほどのプロジェクトです。Vista x64 使用。
やはり何度も build を繰り返していて、ほぼファイルが全部キャッシュ
された状態で比較しています。
よって条件によってはここまで差が出ないと思われます。
Core2 Duo でも /MP4 の方がさらに1~2秒よい結果となりました。
・Visual Studio 2008 MP オプション実験
・Visual Studio 2008
今度は IDE 上での MP Build を試しています。
ソース単位で並列にコンパイルできます。
Project の Property から下記の設定をしています。
C/C++ → Code Generation
Enable Minimal Rebuild が「Yes (/Gm)」になっていたら「No」へ
(他にも /MP 非互換オプションがあればはずす必要あり)
C/C++ → Command Line
Additional options: に「/MP4」を追加
・Pentium4 3.6GHz×2×HT (=4) での比較
(MP無し) 52秒→28秒 (/MP4)
・Core2 Duo 2.4GHz での比較
(MP無し) 30秒→18秒 (/MP2)
厳密な条件ではないですが、VS IDE 上でも簡単に試すことができました。
Makefile で依存関係を記述すると 1ファイル単位のコンパイルになって
しまうので、/MP 指定もあまり有効に活用されません。
こちらの方が簡単に結果を出せるようです。
ソースファイル 12本ほどのプロジェクトです。Vista x64 使用。
やはり何度も build を繰り返していて、ほぼファイルが全部キャッシュ
された状態で比較しています。
よって条件によってはここまで差が出ないと思われます。
Core2 Duo でも /MP4 の方がさらに1~2秒よい結果となりました。
・Visual Studio 2008 MP オプション実験
・Visual Studio 2008
2007/11/22
Visual Studio 2008 MP オプション実験
先日のエントリで書いた Visual Studio 2008 の MP オプションを
かるく(いいかげんに)試してみました。
・Visual Studio 2008
取りあえずコマンドラインから。
使用した環境
・Visual Studio 2008 Professional (VC9.0)
・Vista x64、x64(amd64) 版コンパイラ cl
・Pentium4 3.6GHz ×2CPU × HT = 4thread RAM2G
・41本の cpp ソースコンパイル
コマンドラインオプション
-c なので obj 生成のみ。
何度も試したのでファイルはほぼキャッシュされている状態。
結果 (コンパイル時間の比較)
後ろの括弧の中はパフォーマンスモニタの CPU 使用率(目安) です。
かなり効果ありました。
でももっと驚いたのは
あれ、VC8 (VS2005) でも /MP が使えている。
テストしててエラーが出ないからおかしいなとは思ったのですが。
マニュアルに無いけど隠し機能でしょうか。知らなかっただけかも。
同条件で Core2 Duo の場合
・Visual Studio 2008 Professional (VC9.0)
・Vista x64、x64(amd64) 版コンパイラ cl
・Core2 Duo E6600 2.4GHz RAM4G
かるく(いいかげんに)試してみました。
・Visual Studio 2008
取りあえずコマンドラインから。
使用した環境
・Visual Studio 2008 Professional (VC9.0)
・Vista x64、x64(amd64) 版コンパイラ cl
・Pentium4 3.6GHz ×2CPU × HT = 4thread RAM2G
・41本の cpp ソースコンパイル
コマンドラインオプション
-W3 -WX -O2 -Oi -Ot -Oy -Ob2 -GA -GF -Gy -DWIN32 -D_WINDOWS -D_MBCS -EHsc -fp:except- -fp:fast -Zi -TP -c
-c なので obj 生成のみ。
何度も試したのでファイルはほぼキャッシュされている状態。
結果 (コンパイル時間の比較)
VC9 /MP1 47sec (28%) (/MP無指定と同じ) VC9 /MP2 30sec (55%) VC9 /MP4 21sec (100%)
後ろの括弧の中はパフォーマンスモニタの CPU 使用率(目安) です。
かなり効果ありました。
でももっと驚いたのは
VC8 /MP1 42sec VC8 /MP4 19sec
あれ、VC8 (VS2005) でも /MP が使えている。
テストしててエラーが出ないからおかしいなとは思ったのですが。
マニュアルに無いけど隠し機能でしょうか。知らなかっただけかも。
同条件で Core2 Duo の場合
・Visual Studio 2008 Professional (VC9.0)
・Vista x64、x64(amd64) 版コンパイラ cl
・Core2 Duo E6600 2.4GHz RAM4G
VC9 /MP1 29sec VC9 /MP2 17sec
2007/11/21
Visual Studio 2008
VisualStudio2008 がリリースされたのでインストールしてみました。
とりあえず Express Edition で。インストールフォルダは 9.0。
とりあえずCコンパイラのバージョン比較
追加されたコンパイルオプションは次の3つでした。
どれくらい効果があるのか、MP オプションがかなり気になります。
Multi Processor 対応で build してくれるそうです。
MP オプションの詳細や使い方は下記のとおり。
・/MP (Build with Multiple Processes)
その他増えた機能などはこちら。
・What's New in Visual C++ 2008
Intrinsics も SSE4 に対応したようですね。
intrin.h も更新されています。
新しい SSE 関連の Intrinsics 命令の説明は下記のページです。
・Supplemental Streaming SIMD Extensions 3 Instructions
・Streaming SIMD Extensions 4 Instructions
・SSE4A and Advanced Bit Manipulation Intrinsics
動作環境がないので試せないけど、
かなり面白そうな命令が多数並んでいます。
関連エントリ
・SSE についてのメモ(2) SSE4など
とりあえず Express Edition で。インストールフォルダは 9.0。
とりあえずCコンパイラのバージョン比較
・VisualStudio2008 Express Edition cl Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 ・VisualStudio2005 Professional cl Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
追加されたコンパイルオプションは次の3つでした。
/Qfast_transcendentals generate inline FP intrinsics even with /fp:except /Qimprecise_fwaits generate FWAITs only on "try" boundaries, not inside "try" /MP[n] use up to 'n' processes for compilation
どれくらい効果があるのか、MP オプションがかなり気になります。
Multi Processor 対応で build してくれるそうです。
MP オプションの詳細や使い方は下記のとおり。
・/MP (Build with Multiple Processes)
その他増えた機能などはこちら。
・What's New in Visual C++ 2008
Intrinsics も SSE4 に対応したようですね。
intrin.h も更新されています。
新しい SSE 関連の Intrinsics 命令の説明は下記のページです。
・Supplemental Streaming SIMD Extensions 3 Instructions
・Streaming SIMD Extensions 4 Instructions
・SSE4A and Advanced Bit Manipulation Intrinsics
動作環境がないので試せないけど、
かなり面白そうな命令が多数並んでいます。
関連エントリ
・SSE についてのメモ(2) SSE4など