2012-01-10 10 views
1

私はC++ AMPで遊んでいますが、何らかの理由でダウンしたコードがコンパイルされません。この:次のエラーでparallel_for_eachでサポートされていないタイプのエラー

concurrency::extent<2> e(2,2); 

concurrency::parallel_for_each(grid<2>(e), [](index<2> i) restrict(direct3d) { 
}); 

結果:

error C3576: 'wmain::': Concurrency::details::_Parallel_for_each argument #3 has unsupported type c:\program files (x86)\microsoft visual studio 11.0\vc\include\amp.h

ちょうどconst _Kernel_type& _Kernel

注用に渡されるラムダ式を好きには表示されません。私はAMPサポートを含むVisual Studio 11 Developer Previewを使用しています。 "restrict(direct3d)"は、どのアクセラレータが問題のコードを実行するかを制御する新しいキーワードです。

アイデア?私はいくつかの異なる例からコピーしようとしましたが、何も動作しませんので少しうまくいきます。

答えて

3
...ラムダはほとんどC++ AMPの例で書かれている方法です

parallel_for_eachに渡されるラムダは、空のクラスです(変数が取り込まれないため、データメンバーはありません)。データなしでは計算を行うことはできません。そのため、エラーが発生します。

ので、同じように、あなたの例に同時実行::配列または同時実行:: array_viewを追加してください:

using namespace concurrency; 
extent<2> e(2,2); 
array<int, 2> a(e); 

parallel_for_each(grid<2>(e), [&a](index<2> i) restrict(direct3d) { 
    a[i] = 1; 
}); 

注:これは、Visual Studio 11の開発者プレビューにのみ適用されます。この動作は、今後のベータ版で変更される予定です。コードはそのままコンパイルされます。空のクラスを渡すだけでは何もしません。

+0

私の友人は絶対天才です(学者と紳士だけでなく)!もちろん完璧なセンスです。親切にありがとう。 – Dave

+0

私は助けることができてうれしいです。 –

+0

これに加えて、入力(配列など)を含めなければ、出力、つまりvalueで取り込まれたarray_viewを指定した場合、正常に機能します。だから私はラムダでキャプチャされた少なくとも1入力または1出力が必要だと思います。ベータ版ではこの制限が緩和されていることはよく分かります。もちろん後天候はすばらしいことですが、今は完全に明白です:) – Dave

0

私が知る限り、を制限します。キーワードは、MicrosoftがC++ AMPのために導入した拡張機能です。このキーワードは、Visual Studio 2010の後のVisual Studio C++コンパイラでサポートされます。

2012年のベータ版は現時点では認識していませんので、例、ブログなどを見つけたと思います新しいC++ AMPを使用していますが、Visual Studio 2010を使用して自分自身で動作するようにしようとしています。

Visual Studio 2010に同梱されているC++コンパイラは、このため、エラーが発生しています。

私はC + + AMPのためにVS2012ベータ版を試してみるまで少し待たなければならないと思います。ダニエル・モスのチャンネル9でのデモを見たときにも、私の指は確かに痒みを覚えました: - )...私は毎日の仕事でC++ AMPが必要なわけではありませんが、かなり面白い(遊び)もののようです。

EDIT1

は、実際に私は周りを見回した、 「Visual Studioの11の開発者プレビュー」C++ AMPが利用可能であるように思わリリースがあるようです(ライブラリは、と私はまた、実装の拡張子を持つC++コンパイラを想定します)。

今、(私には、ファイルへのパスに基づいて、その推測をした(これは、Microsoft Visual Studioの11.0 :-)が含まれている)、あなたがVS11を使用しているように思わあなたのエラーメッセージで再び見

EDIT2。たぶん、あなたは値によってキャプチャし、このようにそれを可変にするために、ラムダのキャプチャモードを指定しようとする必要があります

[=](index<2> i) mutable restrict(direct3d) {} 

少なくとも、これは

+0

ご回答ありがとうございます。はい、私はVS2011 Dev Previewを使用しているはずです。私はmutableキーワードを試しましたが、これは助けになっておらず、明示的に値を取り込んでいません。うーん。 – Dave

+0

ところで、mutableキーワードは、C++ AMPで落胆したものです...詳細については、チームブログでお待ちしています。 –

+0

@Daniel Moth:ありがとう、私はそれを知らなかったのです。この場合、私はこの場所(http://msdn.microsoft.com/en-us/library/hh265136(v=vs.110).aspx)からのmsdnコンテンツを見直し、更新する必要があります。 – ds27680

関連する問題