2012-01-10 140 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

它只是似乎並不喜歡lambda表達式傳遞爲const _Kernel_type& _Kernel

注意;我正在使用包含AMP支持的Visual Studio 11 Developer Preview。 「restrict(direct3d)」是一個新的關鍵字,用於支持控制哪個加速器運行有問題的代碼。

任何想法?我試着從幾個不同的例子複製,但沒有任何作品,所以我有點難倒。

回答

3

您的lambda傳遞給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開發者預覽版。在即將發佈的Beta版本中,行爲將發生變化您的代碼將按原樣編譯,沒有任何錯誤。傳遞空課不會做任何事情。

+0

你我的朋友是一個絕對的天才(以及一個學者和先生們)!當然是完美的感覺。非常感謝你。 – Dave 2012-01-10 23:58:37

+0

我很高興能幫上忙。 – 2012-01-11 02:18:36

+0

除此之外,我注意到如果你不包含任何輸入(例如一個數組),如果你指定輸出,即按值捕獲的array_view,那麼事情就會起作用。所以我猜你需要在lambda中捕獲至少1個輸入或1個輸出。很高興聽到這個限制正在Beta版本中放鬆,因爲它並不特別明顯。當然,後見之明是一件美妙的事情,現在它已經非常明顯了:) – Dave 2012-01-11 05:04:13

0

嘛,據我知道限制關鍵字是一個擴展微軟爲C++ AMP介紹。該關鍵字將由Visual Studio 2010之後的Visual Studio C++編譯器支持。

我不知道在這個時候的2012年測試版,所以我的猜測是你找到了示例,博客等等來描述新的C++ AMP,你試圖看到它爲你自己,但與Visual Studio 2010一起工作。

然而,Visual Studio 2010附帶的C++編譯器並不支持restrict關鍵字,據我所知。這就是你遇到錯誤的原因。

所以我想對於C++ AMP,我們將不得不等待一個VS2012測試版發佈,直到我們可以使用它。當我在Channel 9上看到Daniel Moth的一些演示時,我的手指當然也很癢: - )......我的日常工作並不需要C++ AMP,但它看起來很有趣(玩)。

EDIT1:其實我環顧四周,似乎有一個 「的Visual Studio 11開發者預覽」版本,其中C++ AMP似乎是可用(圖書館,我也承擔了C++編譯器實現的擴展)。

EDIT2現在你的錯誤信息再次尋找它似乎是你正在使用VS11(我做了基於路徑包括文件(它包含了微軟的Visual Studio 11.0 :-))上的猜測。也許你應該嘗試指定的拉姆達的拍攝模式,按值來捕捉並使其可變這樣的:

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

至少這是拉姆達是怎麼寫的大多數C++ AMP的例子...

+0

感謝您的回覆。是的,我應該提到我正在使用VS2011 Dev Preview。我嘗試了可變關鍵字,這並沒有幫助,也沒有明確地按價值捕獲。嗯。 – Dave 2012-01-10 20:12:24

+0

順便說一下,可變關鍵字是不鼓勵C++ AMP的東西......請繼續關注團隊博客,以瞭解更多關於... – 2012-01-11 19:32:27

+0

@Daniel Moth:好的,謝謝我沒有意識到這一點。在這種情況下,我想從這個位置(http://msdn.microsoft.com/en-us/library/hh265136(v=vs.110).aspx)msdn內容應該審查和相應更新... – ds27680 2012-01-16 13:31:24

相關問題