月別アーカイブ: 2007年11月

プログラマの開発環境

メモリの価格が急激に下がっているそうです。
そんな話をしていたら、タイミングよく 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 を自在に渡り歩くスキルも、これから
必要になってくるのかもしれません。

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

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 ソースコンパイル

コマンドラインオプション

 -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

WindowsMobile Advanced W-ZERO3[es] の ctrlswapmini

以前下記エントリで書いた ctrlswapmini についてです。
WindowsMobile touchkeysip / ctrlswapmini

Advanced W-ZERO3[es] WS011SH での ctrlswapmini 動作に関して、
拡張かな時に [→] キーの判定が効かなくなるのは他のソフトとの
相性が原因だったと報告をいただきました。
ただ同条件にしても W-ZERO3[es] WS007SH では問題が発生しないため、
本当の原因は特定できていません。

また別件で、Advanced W-ZERO3[es] WS011SH では ctrlswapmini の
回転時キーマップが有効にならないとの報告をいただきました。
こちらも W-ZERO3[es] WS007SH では動作しているので、
機種依存の問題の可能性があります。
やはり実機がないとわからないですが、何か追加情報等ありましたら
ご連絡ください。

ctrlswapmini

Visual Studio 2008

VisualStudio2008 がリリースされたのでインストールしてみました。
とりあえず 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など