いかに示すことだけはまず確認を。ログインユーザー名はローマ字オンリーで作成ください。どのエラーかは忘れましたが、C++AMPのコンパイルが失敗するようになります。 すでに日本語で作ってしまった人は、テンポラリフォルダのファイルパスをシステムの環境変数から変えてください。Windows8(7もおそらく)の場合、 コントロールパネル->システムとセキュリティ->システム を開いて、左側にある詳細設定をクリックします。以下のシステムのプロパティが表示されるかと。
右下の環境変数をクリックすれば以下のダイアログとなりますので、TMPを変更します。TEMPも変えた方がのちのためでしょうね。 Cドライブのトップディレクトリに、tmp , tempなどのフォルダを作ります。これを新しい一時ディレクトリにしますので。日本語にしないでください。半角英数だけでお願いします。 管理者権限を振りかざし、tmp , tempフォルダを作った場合を以下に示します。
等ですね。 1番ぐらいは解決してください。 2番はご利用のGPUのメモリ搭載量を確認してください。GPU-Z、MSI-AfterBuner等のソフトを利用すればわかります。80%くらいの利用率で抑えておいた方が安全です。現在のGPUに仮想メモリの機能はありません。足りなければそのまま仕事を放棄します。見かねたOSがGPUの再起動を図るのです。 3番、これは気が付きにくいですね。どうやらGPUは忙しいと返事をしなくなるようです。Windows8の規定では2秒間応答がないとGPUの再起動をかけるようです。Micorosoftのホームページではそんなに重い処理を渡すなと書いてありました。数回に分けて処理させるなど工夫をしましょう。 具体的な例では、AMD GPU R9 280X に2000万スレッドを発行し、各スレッドで3*3の行列演算を300回繰り返したところWindows8に再起動をかけられました。500万スレッドづつに減らしたところ大丈夫でした。ここら辺が目安ですね。性能が低いGPUではもっと気を付ける必要があります。あくまで2秒しか待ってくれませんので。 上記3つで解決しない場合、OSの再起動、アップデート、ドライバーの再インストールを試みましょう。4番の原因となります。ウイルスソフトは迷わず消しましょう。
GPUのスペックには、利用できるテクスチャステージ段数といったものがあります。C++ AMPで1度に利用できるarray変数の数はこれに比例しますので、低価格帯のGPUでは利用できる変数が少なかったりします。 テクスチャステージは読み取り専用レーンと書き込み専用レーンに分かれていたりしますので、読み込みしか行わない変数には読み込み専用のマークを以下のようにつけておくことで解決する可能性があります。
実はこれ、Windows8ではほぼありえない状況です。相当厳しいバグがない限り、OSごと消え去ることはないですね。デバッグモードでGPUコードを実行しているとたまになりますが。 GPUの冷却不足がないか確認を MSI AfterBurnerを使ってファンを全開にしましょう。市販GPUは適当なつくりのものが多く、長期的な数値計算に耐えるものではありません。そこらへんの信頼性を補うためにはファンを多少強力に回しましょう。 それでもだめならGPUが壊れているのでは。
"GPUを探してみよう!" の項でGPUを探すコードを書きましたが、その時エミュレータで構成されているGPUの表示を省いたと思います。実はこのエミュレータでC++AMPのコードを回すことができます。 上記は"GPUを探してみよう!"のコードを私のPCで実行してみた結果です。 0 : AMD Radeon HD 7900 Series普通のGPUです。実際はR9 280Xのはずですが。AMDのドライバーを入れるとちゃんと表示された記憶があります。 1 : Microsoft Basic Render DriverCPUのベクトル演算回路、全コアを用いた高速なGPUエミュレータです。倍精度計算もでき、利用可能なメモリ量もPCに搭載されているものとなります。0GBと表示される理由はわかりません。 2 : Software AdapterGPUコードのデバック等に使えるのでは?とても遅いです。 3 : CPU acceleratorよくわかりません。
以下、R9 280X 利用の場合。 PCIExpress ver2.0なら*16レーン、ver3.0なら*8レーンあった方が良いです。 電源は12V系統が何Aの電流を出力できるか。GPU用に30Aないと無理です。 CPUの性能はさして重要ではないです。1万円以上のCPUなら大丈夫でしょう。 メインメモリは最低、GPUのメモリ総量+2GBはないとだめです。 デスクトップ描画がおろそかになるので、内臓GPUを用いて描画する。 C++ AMPを走らせたGPUは恐ろしいほど全力で回ります。どんなゲームよりも高負荷な状態となりますので、冷却に気を配ってください。ラジエーター、ヒートパイプの巨大なモデルがおすすめです。