2011-09-27 5 views
0

グーグルではあまり役に立ちませんでした。 (ダブルV = idx.x)を倍増する整数からキャスト以下のコードスニペットで int indexを使ってC++でdoubleが期待されるAMP retrict(direct3d)code

は「シェーダーの作成に失敗しました」実行時エラーにつながります。 私は、restrict(direct3d)がGPUがコンパイル時に処理できないことを警告してくれたと思っていました。 pow()に代わる方法がありますか?そうするためにループを書く必要がありますか?

concurrency::array_view<double,1> prices = … 
concurrency::parallel_for_each(
    prices.grid, [=](index<1> idx) mutable restrict(direct3d) { 
     double v = idx.x; 
     prices[idx] = concurrency::pow(u, v); 
… 
+0

実際に問題の原因となっているのは本当ですか?私はそれを疑う傾向がある。 'idx.​​x'を評価して結果を投げ捨て、' double v = 2.502907875'を設定するとどうなりますか? – leftaroundabout

+0

double v = 2.502907875となります。実際に私が必要としたのは価格[idx] =並行性:: pow(u、idx.x)であり、それはそのexcepionを与えるでしょう。 –

+0

ところで、私はエミュレーションのもとでこれを試しています。 –

答えて

1

Windows上のGPUのための二重サポートの私達の説明を参照してください、ともC++ AMP数学ライブラリ http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/08/math-library-for-c-amp.aspx http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/07 /double-precision-support-in-c-amp.aspx

まだ質問がある場合は、お気軽に返信してください。また、C++アンプであなたの質問にタグを付けて、見つけられるようにしてください。

関連する問題