CSDN首页>

Hello C++ AMP!(2)

发表于2012-08-22 11:30| 来源未知| 作者csdn

摘要:矩阵运算也许对于大多数程序员并不重要,所以下面来个更通俗版本的AMP

矩阵运算也许对于大多数程序员并不重要,所以下面来个更通俗版本的AMP:

 1 #include <iostream>

2 #include <amp.h>

3

4 int main()

5 {

6 int nickName[6]{'a', 96, 'd', 'r', 'j', 'x'};

7 concurrency::array_view<int> myView(6, nickName);

8 concurrency::parallel_for_each(myView.extent,

9 [=] (concurrency::index<1> idx) restrict(amp)

10 {

11 myView[idx] += 1;

12 }

13 );

14 for(int i = 0; i<6; ++i)

15 std::cout<<(char)myView[i];

16 return 0;

17 }

 

在没有运行前,你知道输入的是什么吗?先不急着公布答案,先来说说其中的“内涵”。

首先,你是无法通过编译的。因为Line 6我使用了c++11里的初始化方式。默认情况下是无法通过编译的,你要改成

int nickName[6] = {'a', 96, 'd', 'r', 'j', 'x'};

是的,目前vs11不支持initialize list。

其次你可能会问,为什么nickName不是char类型的而是int类型的。最直白的回答就是array_view不支持char,最少也要是int。

具体我们可以看array_view的声明:

template <typename _Value_type, int _Rank = 1>

class array_view : public _Array_view_base<_Rank,sizeof(_Value_type)/sizeof(int)>

{

//为了便于阅读,省略此处代码}

array_view在上一篇文章中提到过,这里重申下,通俗来讲他类似与一个迭代器。他提供了parallel_for_each需要用的index接口。

restrict是个非保留字符,他只是在当前语境中才有作用。这个“提示符”负责告诉编译器,程序员意图要生成什么程序。是cpu呢还是amp,amp的意思就是使用加速器。

什么是加速器(Aaccelerator)?就是另一个可以并行计算的设备,比如你的显卡GPU,比如其他支持SIMD的向量处理器,比如你通过OS驱动模拟的处理器等。另外,早期amp的前身是字符串“direct3d”,现在替换为amp了。如果你看资料发现了“direct3d”,不要太奇怪。

kernel,就是要运行在加速器上的代码。

本示例的kernel就一句:

myView[idx] += 1;

显然是对myNickName所有字符+1.现在你该明白输出什么了吧?

下面给个VS11对c++ 11的支持度(visual studio only $_$):

C++11 Core Language Features VC10 VC11
Rvalue references v0.1v1.0v2.0v2.1v3.0 v2.0 v2.1*
ref-qualifiers No No
Non-static data member initializers No No
Variadic templates v0.9v1.0 No No
Initializer lists No No
static_assert Yes Yes
auto v0.9v1.0 v1.0 v1.0
Trailing return types Yes Yes
Lambdas v0.9v1.0v1.1 v1.0 v1.1
decltype v1.0v1.1 v1.0 v1.1**
Right angle brackets Yes Yes
Default template arguments for function templates No No
Expression SFINAE No No
Alias templates No No
Extern templates Yes Yes
nullptr Yes Yes
Strongly typed enums Partial Yes
Forward declared enums No Yes
Attributes No No
constexpr No No
Alignment TR1 Partial
Delegating constructors No No
Inheriting constructors No No
Explicit conversion operators No No
char16_t and char32_t No No
Unicode string literals No No
Raw string literals No No
Universal character names in literals No No
User-defined literals No No
Standard-layout and trivial types No Yes
Defaulted and deleted functions No No
Extended friend declarations Yes Yes
Extended sizeof No No
Inline namespaces No No
Unrestricted unions No No
Local and unnamed types as template arguments Yes Yes
Range-based for-loop No Yes
override and final v0.8v0.9v1.0 Partial Yes
Minimal GC support Yes Yes
noexcept No No

C++11 Core Language Features: Concurrency VC10 VC11
Reworded sequence points N/A N/A
Atomics No Yes
Strong compare and exchange No Yes
Bidirectional fences No Yes
Memory model N/A N/A
Data-dependency ordering No Yes
Data-dependency ordering: function annotation No No
exception_ptr Yes Yes
quick_exit and at_quick_exit No No
Atomics in signal handlers No No
Thread-local storage Partial Partial
Magic statics No No

C++11 Core Language Features: C99 VC10 VC11
__func__ Partial Partial
C99 preprocessor Partial Partial
long long Yes Yes
Extended integer types N/A N/A

原文转自:http://www.cnblogs.com/baesky

0
0
Hello C++ AMP!(2)
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章