C++ AMP: Hello C++ AMP!(2)

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

 int main()
 {
     int nickName[6]{'a', 96, 'd', 'r', 'j', 'x'};
     concurrency::array_view<int> myView(6, nickName);
     concurrency::parallel_for_each(myView.extent,
         [=] (concurrency::index<1> idx) restrict(amp)
     {
         myView[idx] += 1;
     }
     );
     for(int i = 0; i<6; ++i)
        std::cout<<(char)myView[i];
     return 0;
 }

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

首先,你是无法通过编译的。因为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 FeaturesVC10VC11
Rvalue references v0.1v1.0v2.0v2.1v3.0v2.0v2.1*
ref-qualifiersNoNo
Non-static data member initializersNoNo
Variadic templates v0.9v1.0NoNo
Initializer listsNoNo
static_assertYesYes
auto v0.9v1.0v1.0v1.0
Trailing return typesYesYes
Lambdas v0.9v1.0v1.1v1.0v1.1
decltype v1.0v1.1v1.0v1.1**
Right angle bracketsYesYes
Default template arguments for function templatesNoNo
Expression SFINAENoNo
Alias templatesNoNo
Extern templatesYesYes
nullptrYesYes
Strongly typed enumsPartialYes
Forward declared enumsNoYes
AttributesNoNo
constexprNoNo
AlignmentTR1Partial
Delegating constructorsNoNo
Inheriting constructorsNoNo
Explicit conversion operatorsNoNo
char16_t and char32_tNoNo
Unicode string literalsNoNo
Raw string literalsNoNo
Universal character names in literalsNoNo
User-defined literalsNoNo
Standard-layout and trivial typesNoYes
Defaulted and deleted functionsNoNo
Extended friend declarationsYesYes
Extended sizeofNoNo
Inline namespacesNoNo
Unrestricted unionsNoNo
Local and unnamed types as template argumentsYesYes
Range-based for-loopNoYes
override and final v0.8v0.9v1.0PartialYes
Minimal GC supportYesYes
noexceptNoNo

 

C++11 Core Language Features: ConcurrencyVC10VC11
Reworded sequence pointsN/AN/A
AtomicsNoYes
Strong compare and exchangeNoYes
Bidirectional fencesNoYes
Memory modelN/AN/A
Data-dependency orderingNoYes
Data-dependency ordering: function annotationNoNo
exception_ptrYesYes
quick_exit and at_quick_exitNoNo
Atomics in signal handlersNoNo
Thread-local storagePartialPartial
Magic staticsNoNo

 

C++11 Core Language Features: C99VC10VC11
__func__PartialPartial
C99 preprocessorPartialPartial
long longYesYes
Extended integer typesN/AN/A




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值