《C++ AMP:用Visual C++加速大规模并行计算》——第3章 C++ AMP基础

第3章 C++ AMP基础

C++ AMP:用Visual C++加速大规模并行计算
通过本章的学习,读者将会了解:

array
accelerator与accelerator_view
index
extent
array_view
parallel_for_each
使用restrict(amp)标记的函数
在CPU和GPU之间复制数据
数学库函数
小结

时间: 2024-10-31 01:08:45

《C++ AMP:用Visual C++加速大规模并行计算》——第3章 C++ AMP基础的相关文章

《C++ AMP:用Visual C++加速大规模并行计算》——第1章 C++ AMP概述

第1章 C++ AMP概述 C++ AMP:用Visual C++加速大规模并行计算 通过本章的学习,读者将会了解: 为什么选择GPGPU?什么是异构计算? CPU并行技术 C++ AMP方法 小结

《C++ AMP:用Visual C++加速大规模并行计算》——1.2 CPU并行技术

1.2 CPU并行技术 C++ AMP:用Visual C++加速大规模并行计算 减少应用程序串行部分耗时的一种方法是尽量降低其串行性,重新设计应用程序,充分利用CPU并行和GPU并行.虽然GPU可以同时拥有成千上万个线程,而CPU要少得多,但利用CPU的并行性也能对整体加速比有所帮助.理想情况下,CPU并行技术和GPU并行技术是兼容的,方法也有很多. 1.2.1 向量化 SIMD是一种能使处理速度变得更快的重要方法,也即单指令流多数据流(Single Instruction, Multiple

《C++ AMP:用Visual C++加速大规模并行计算》——1.3 C++ AMP方法

1.3 C++ AMP方法 C++ AMP:用Visual C++加速大规模并行计算 C++ AMP是一个并行库和语言层面的小扩展,能够帮助在C++应用程序中实现异构计算.(AMP是Accelerated Massive Parallelism的缩写,即加速大规模并行.)Visual Studio提供了新的工具和功能支持,可以用来调试和剖析C++ AMP应用程序的性能,包括GPU调试和GPU并行可视化.有了C++ AMP以后,主流C++开发人员可以使用熟悉的工具来创建可移植的.不会过时的应用程序

《C++ AMP:用Visual C++加速大规模并行计算》——1.1 为什么选择GPGPU?什么是异构计算?

1.1 为什么选择GPGPU?什么是异构计算? C++ AMP:用Visual C++加速大规模并行计算 作为开发者,面对周围不断变化的世界,努力调整自己,这种生活我们早已习以为常.IT行业对世界的影响自成体系.我们学习新的语言,使用新的方法,考虑采用新的用户界面,并理所当然地认为它们都能让我们的程序变得更好.为了让下一版比上一版更完善,如果认为采用某种方法会碰壁,我们就会转而换用另外一种方法.而有些开发者现在要使用的最新方法就是异构计算. 本章将回顾计算性能提升的历史,让读者们看看开发者们都碰

《C++ AMP:用Visual C++加速大规模并行计算》——3.9 数学库函数

3.9 数学库函数 C++ AMP:用Visual C++加速大规模并行计算 如前所述,我们不能只在parallel_for_each中调用来自"核函数"的函数.调用函数应该在代码生成时可见,应该使用restrict(amp)标记.如果我们要转换现有代码,就需要做出必要的调整.我们也有可能会调用sqrt()或sin()等库函数.因此,需要使用加速器兼容版本替换这些调用.好消息是amp_math.h里定义了成百上千的此类函数,它们全都在命名空间concurrency::fast-math

《C++ AMP:用Visual C++加速大规模并行计算》——3.8 在CPU和GPU之间复制数据

3.8 在CPU和GPU之间复制数据 C++ AMP:用Visual C++加速大规模并行计算 数据可以在CPU和加速器(通常是GPU)之间自动复制,也可以根据需要使用amp.h中众多的copy()重载函数之一显式复制.例如,我们可以在默认加速器上构造array,然后仅使用一条函数调用便可以把数据复制进去: array<int, 1> a(5, v.begin(), v.end()); 此外,我们还可以构造空数组,然后再使用copy()函数来加载数据.array_view在CPU上有一个对应容

《C++ AMP:用Visual C++加速大规模并行计算》——3.1 array &lt; T,N &gt;

3.1 array < T,N > C++ AMP:用Visual C++加速大规模并行计算 对于C++ AMP开发者来说,头等重要的就是array.array模板位于concurrency命名空间,有两个参数:一个是集合元素的类型,另一个是秩(rank)或者说维数.我们日常工作中使用的多是一维.二维或三维数组,但C++ AMP并没有限制我们只用到三维,如果我们需要,最多可以用到128维! 正常情况下,array是加速器(一般是GPU)上的一组信息(相同类型的).array其实是在accele

《C++ AMP:用Visual C++加速大规模并行计算》——3.7 使用restrict(amp)标记的函数

3.7 使用restrict(amp)标记的函数 C++ AMP:用Visual C++加速大规模并行计算 要想成功地使用restrict(amp)编译,函数必须遵守许多规则.头一条规则我们在3.6节中提到过,与其调用的函数有关.这些规则必须在代码生成时是可见的,也必须使用restrict(amp)进行标记.如果我们没有使用链接时代码生成,基本上就意味着它们一定要和编译时的.cpp文件相同,也可以使用那个.cpp文件中包含的头文件带进来.如果在编译两个.cpp文件(一个调用函数的和一个实现函数的

《C++ AMP:用Visual C++加速大规模并行计算》——1.4 小结

1.4 小结 C++ AMP:用Visual C++加速大规模并行计算 本章描述了异构计算适合处理的问题类型,以及过去数十年间应用程序性能提升的历史.还介绍了C++ AMP,解释了设计C++ AMP的动机.本书其余各部分将会更详细地解释C++ AMP的类库和语言扩展,演示如何使用更先进的技术,使应用程序获得最大的性能提升,展示如何使用Visual Studio的支持功能.有些主流开发人员对通过C++ AMP利用异构感兴趣,本书也为他们提供了指导.