ソフトウェアの作成方法についてのガイドラインはいくつか見ましたが、客観的にテストできるツール類の情報がなくて困ってます。
現状は、インテルスレッドチェッカーの評価版を使用してみる予定です。
動作環境は、OS:windows2003,開発環境は VisualStudio 2005。
ソフトウェアの種類はDB,IISと連携するサーバアプリケーションです。
http://www.compuware.co.jp/products/devpartner_fm/boundschecker/
こんなのもありますが・・・
情報がないというか、選択肢がないのだと思います。
マルチタスクによる問題を確実に確認する手法はあまり無いと思います(学会でコードからのデッドロック検出手法につての論文が出ていた気がするし) 起こらないように作るしかないんじゃ・・・
シリアライズする。 ロックの順序を統一する。 ロック後に別のロック待ちをするときにはタイムアウトを設定する等、基本的な対策でやるしか無いかと。
特にデータベースへのロックになってくると、追いかけるのは大変です(ユースケースに基づくテストプログラムを作って、データベース側のデッドロック検出を併用する等の力業で・・・)
実際に動作させてみないとわかりませんね。チップレベルでダメという場合もありますから。
動作させてみるとのことですが、マルチプロセッサでの動作確認ためには、このようなことをやってみるという具体的な内容はないのでしょうか?
チップレベルでということなので、問題の切り分けのためのリファレンスチップセットと比較するとかでしょうか?
あまりツールには頼れないとおもいますよ。
同時稼動するたとえ正常に排他制御がされても
それだけでおよいと言うわけでもありません。
プロファイラーでの解析や、デッドロック
は必ず発生する前提でコードを作成して対策
(トレース)していないと再現も困難です。
試験時サーバー側のCPUの処理能力に
応じた並列度で試験を繰り返し自動実行
して期待した結果と、統計情報を得て
解析するしかないような気がします。
http://support.microsoft.com/kb/231282/ja
http://q.hatena.ne.jp/1112054078
なげやりですがもうすぐセミナーがあるので
質問してみるとか?
http://www.xlsoft.com/jp/products/intel/college/seminar_multicor...
>チップレベルでということなので
CPU、チップセットレベルの不具合
と言う事では?
コンパイラもありますが。
セミナー情報ありがとうございました。早速申し込んでみました。インテル製品を買ってねということなのでしょうが、使ってみるつもりだったのでデモを見ることができて助かります。他には近日ソフトウェア開発環境展があるので、何かないか見てみます。
ツールに頼りきるつもりはなくて、アプリケーションとしてのテストは当然行って、マルチプロセッサのケースに特化した手法があるかなぁということです。
プロセッサ数を増やして負荷テストを中心にテストを行ってみるということでしょうか?
この場合も、どこまでやればOKとするのかは難しい所ですねぇ。
自分のアプリ以外のバグはとりあえず範囲外かと。OSやライブラリのバグとか言い出したらきりがないので。当然切り分けは必要なのですが。
世間で、ハイパースレッド対応とうたってるソフトウェアは何でOKとしてるんでしょうねぇ。
作成するにあたっては当然気をつけるのですが、ソースコードレビューと、自分で考えたテストケース作成、バグ発生時のデバッグ以外の確認方法がないかなと思っております。
ご紹介いただきました、Bounds Checker は使用したことがないです。Purify は使用しております。紹介ページにはマルチプロセッサ特有のチェックには記載がありませんでした。
評価版がダウンロードできるようなので、後日試してみることにします。