您当前的位置:主页 > 合作加盟 >


《C++ AMP:用Visual C++加速大规模并行计算》——1.2 CPU并行技术-博客-云栖社区


时间:1536061205浏览:147次 admin

摘要: 本条源自C,本人异步社区压榨。 AMP:使用视觉 C++催促大规模并行计算》一书成目的第1章,第节,作者: [美]凯特 Gregory , Ade Miller,更多章节可以参观云社区的异步社区。

本条源自C,本人异步社区压榨。 AMP:使用视觉 C++催促大规模并行计算》一书成目的第1章,第节,作者: [美]凯特 Gregory , Ade Miller,更多章节可以参观云社区的异步社区。

 CPU并行技术

C++ AMP:使用视觉 C++催促大规模并行计算
缩减用功串行工夫耗费的一种办法是M。,重行设计使用,最大限度地使用CPU并行性和GPU并行性。不管GPU可以同时有效数千个线状物,而CPU则少得多。,此外CPU的并行性也有助于各种的的催促比。。抱负状况下,CPU并行技术与GPU并行技术使一体化的。,有很多办法。。

1矢径化

SIMD是预付处置响声的重要途径。,即,单讲授流少材料流(单) Instruction, Multiple 材料)。在本人典型的使用中,你要故障一次使用本人讲授。,辨别的讲授用双手触摸、举起或握住应作为用功控制落实。。但设想落实大材料并行用双手触摸、举起或握住,比如,矩阵附加。,反复讲授(矩阵只得的或浮点小数点元素的附加)。这说明讲授的在楼上可以放大到本人大数。,在辨别的材料中(比如,在矩阵的辨别元素上落实平稳的的讲授。。这可以大大地放慢落实响声。,同时使跌价计算充其量的。

带菌者子化是指从本人孤独的增进中处置本人材料的用功。,一次处置本人书信带菌者。,处置时,对VE成目的每个元素使用平稳的的讲授。。已决定的缀编者可以自发地量子化朝反展出和其他的并行用双手触摸、举起或握住数。。

微软视觉 Studio 2012后退经过SSE(SIMD流讲授放大)内建有或起作用(intrinsic 手工生产量子化。从表面上看,内置有或起作用是行为准则有或起作用。,但它们会坦率地映照成装配讨论讲授序列,转移有或起作用转让的在楼上。。辨别于内联缀编次,最优化器可以担心这些内置有或起作用。,它最优化了行为准则的其他的零件。。不管内建有或起作用比内联缀编更轻易离开,此外他们依然有已决定的可嫁接性的成绩。,由于它们信赖于目的平台ARCI的特别讲授。。生长人员需求知识薄片如果可购得的在目的用模子做上。。到这程度,内建有或起作用_ _cpuid()理当涌现了。,它生长讲授来配药4个只得的。,描述方法处置器的效能。(由于_ _cpuid()编辑互插,到这程度,它使用两个较低的行作为前缀。。反省如果后退SSE3。,您可以使用以下行为准则:

int CPUInfo[4] = { -1 }; 
__cpuid(CPUInfo, 1); 
bool bSSEInstructions = (CpuInfo[3] >> 24 & 0x1);```
有关注意事项:
MSDN的“`_ CPUID的发动的是顾虑 CPUID完整无缺的扶助文档,解说为什么将第二的个有组织的为1。,只得做的事使用哪个位来反省SS后退的详细书信,话说回来以稍微方法反省它如果后退其他的待机效能。,发动的地址是: (v=).
)
毕竟使用哪种内置有或起作用完整安宁本人以稍微方法设计PAR。。比如,如今本人只得扩大某人的权力多的对。。内置有或起作用MyMyHADEYEMP32可以一次添加4对32位数字。。本人用输入值配药两个存储器成一条线的128位数字。,话说回来转让内置有或起作用来添加它们。,最末,到达利益或财富本人128位的值。,这值可以分红4个32位。,数对的总数。这时是MSDN成目的本人示例次。:

include

include

int main ()
{
__m128i a, b;

  [0] = -1;
[1] = 1;
[2] = 0;
[3] = 65535;
[0] = -65535;
[1] = 0;
[2] = 128;
[3] = -32;

  __m128i res = _mm_hadd_epi32(a, b);

  std::wcout << "Original a: " << 
[0] << "t" << [1] << "t" << 
[2] << "t" << [3] << "t" << std::endl;
std::wcout << "Original b: " << 
[0] << "t" << [1] << "t" <<
[2] << "t" << [3] << std::endl;
std::wcout << "Result res: " <<
[0] << "t" << [1] << "t" <<
[2] << "t" << [3] <

  return 0;
}`
终于的第本人元素能与之比拟的东西第本人元素。a0 + a1,第二的能与之比拟的东西a2 + a3,第三能与之比拟的东西b0 + b1,第四的能与之比拟的东西b2 + b3。设想要重行设计行为准则,请孪晶添加。,将这些对分红4组。,可以使用内置有或起作用对行为准则举行并行化。。本人可以找到辨别宽度的内置有或起作用来落实杂多的开着的。、减、不受稍微限度局限的、取反,假设是8位只得的的点积为16×16。,同时落实多个计算的内置有或起作用。

使用这些内置有或起作用举行矢径化的本人缺陷是,行为准则的易读和可维修性将大幅谢绝。。行为准则将自来开端写到完毕。,测得结果其正当,话说回来使用仔细辨析器来做出诊断有先行词行为准则是功能瓶颈路段。,最末,行为准则被苗条的到本人易读差的形态。。

更,Visual Studio 2012,它可以自发地量子化和并行化行为准则。。设想有可以,缀编者将自发地朝反展出朝反展出。。带菌者子化将重行有组织的朝反展出。,总数朝反展出,因此,CPU可以同时落实多个迭代。。使用自发地矢径化,在落实后退SIMD讲授的CPU上落实朝反展出时,它的响声可以预付8倍下。。比如,后退SSE2讲授集的最新处置器,它容许缀编者代表CPU在4 NU上举行=mathematics运算。。假设在单结心机具上也可以到达催促。,并且不需求时尚行为准则。。

自发地并行化重组朝反展出,庶几乎它可以同时在多个线状物上落实。,使用多核CPU和多处置器,将各种的作业分比例各种的可购得的的处置器。。与自发地矢径化辨别,,本人需求使用γ-语用来并行化讲授。,通知缀编者有先行词朝反展出需求并行化。。这两个独特性同时工作。,到这程度,量子化环路可以在多个处置器上并行。。

.2 OpenMP

OpenMP(MP代表多重的处置)是一种跨讨论的讨论。、跨平台CPU并行用功制作节目摇动(API),可追踪的1997。OpenMP后退FORTRAN讨论、C和C++,可以转让Windows和非Windows平台。。Visual C 经过一组编辑讲授后退OpenMP。。决定有成某种程度内核可购得的。、准备线状物、在线状物当中区分工作的工作是由OpenMP应验的。。上面是本人诉讼。:

// size is a compile-time constant
double* x = new 双重[份量] 
double* y = new 双重[上胶料] + 1]; 
// get values into y
#pragma omp parallel for
for (int) i = 1; i < size; ++i) 
{ 
   x[i] = (y[i - 1] + y[i + 1]) / 2; 
}```
这段行为准则使用带菌者x和带菌者y,遍历y的每个元素准备x。经过扩大某人的权力pragma,并用/openmp标记重编辑次,就可以把工作分比例多个线状物(每个内核本人线状物)。比如,设想有4个内核,且带菌者由10 000个元素结合,那么第本人线状物许诺从1到2 500的i值,第二的个许诺2 501到5 000的i值,依此类推。当朝反展出完毕时,x带菌者恰好会被填完。生长者要许诺构成可并行朝反展出,自然这亦最难的零件。比如,上面的朝反展出在当前形式下是不可并行化的:

for (int) i = 1; i <= n; ++i) 
[我] = A - 1] + b[i];`
此行为准则具有朝反展出调动互插(朝反展出承载)。 信赖相干)。比如,决定A〔2502〕的值,线状物只得使用[2501 ]的值。,这说明第二的个线状物只得比及第本人线状物完毕。。生长人员可以向该行为准则添加现实。,转移正告,此外行为准则可以运转不正确。。

OpenMP的首要限度局限经过源自它的复杂性。。从1到上胶料的朝反展出,份量值在朝反展出的开端时是已知的。,在线状物当中区分工作是很轻易的。。OpenMP要故障处置for朝反展出体三个结合零件中变量(本例中是i)平稳的的状况,独一无二的当受测验限制和尺寸值在开端时才晓得。

行为准则如:

for (int) i = 1; (i * i) <= n; ++i)
不克不及用#pragma omp parallel for并行化 ,由于它测得结果了我的平方。,而故障i。上面的行为准则:

for (int) i = 1; i <= n; i += Foo(abc))
也不克不及经过语用 omp parallel 并行化,由于我不克不及预先注定晓得无论何时增长的面值。。

异样,读取包装成目的各种的朝反展出或用迭代来迭代集中朝反展出,也不克不及并行化。。本人可以需求读取材料布置成目的各种的行。,话说回来使用OpenMP后退朝反展出来处置它。。

3被附加运转库(CONCRT)和并行打字库

微软的被附加运转库由4肉体美零碎结合,WHI。

并行打字库(并行) Patterns Library,PPL)。预约流通行为准则、典型中卫船和算法。
异步代劳库(异步) Agents 书屋)。多用双手触摸、举起或握住间无锁异步书信,预约了由于角色的制作节目用模子做和增进内音讯使铭记。
工作调整次(工作) 调整器)。使用作业编密码(工作) 行窃)在运转时使一体化工作的战略。。
探测器(资源) 导演)。工作调整器使用它在T分派CPU核或内存资源。。
PPL觉得像是说明书库。,使用模板帮助并行朝反展出和其他的布置。C++在C++11中扩大某人的权力了lambda措辞独特性(不管在2010年发行的Microsoft Visual C 这效能曾经在版本中预约了。,这大大地预付了PPL的可购得的性。。

比如,上面的朝反展出序列:

for (int) i = 1; i < size; ++i) 
{ 
  x[i] = (y[i - 1] + y[i + 1]) / 2; 
}```
可以经过用parallel_for代替for变成并行朝反展出:

include

// . . .
被附加::并行(1), size, =
{
x[i] = (Y [I-1)] + y[i+1])/2;
});`
parallel_for第三个限制因素是lambda措辞。,它和旧的朝反展出体同上。。生长人员需求晓得的是,这朝反展出可以并行化。,各种的其他的的工作都丢给书屋了。。设想你不熟悉lambda措辞,请读物假日成目的C。 知识LAMBDA在11成目的表达。。

parallel_foR朝反展出有以下限度局限:使用贮藏变量从参赛人扩大某人的权力到终极值减去1(PR),无结束限制可以恣意设置。。这些限制与OpenMP异常比喻。。反省朝反展出变量的平方值如果决不UPP,或许使用有或起作用来到达步长。,因此的朝反展出不克不及被并行的并行化。,这与OpenMP的请求是同上的。。

其他的已决定的算法,如parallel_for_eachparallel_invoke,以其他的方法后退材料集的遍历。与迭代船协作。,说明书库成目的迭代船,要在parallel_for_each使用前向迭代器,或许为了成更妥的功能。,还可以使用随机参观迭代器。。迭代故障按必然的次举行的。,此外船成目的每本人元素都将被参观。。设想要并行落实大批用双手触摸、举起或握住,可以使用parallel_invoke,比如,三lambda措辞作为限制因素使铭记。。

值得一提的是,智能线状物结构模块(线状物) Building Block,与PPL使一体化的的TBB,这说明,使用PPL无力的限度局限行为准则仅使用微软缀编者。。TBB预约词义学层使一体化的摇动和等积的并行S。,设想需求,您可以将行为准则嫁接到TBB。。

4工作并行库

工作并行库是一种由于.NET构架的被附加生长办法。它不只用于C的使用、F或VB的生长人员预约了本人并行朝反展出receiver 收音机。,它还预约了工作和达到。。CLR线状物池许诺调整和实行线状物。。托管生长商有其他的选择。,比如,PLIQ。

5经WINDOWS资深的网格平台

Direct3D平台后退本人驱动次用模子做。,该用模子做容许稍微武器装备拔出到微软中。 Windows并落实与图形互插的行为准则。。这亦Windows后退GPU的方法。,银幕位图绘制成目的复杂图形工作,直到DirectCompute这种可以处置任性GPU计算的技术,这都是Windows对GPU的后退。。同时,该构架还后退用CPU行为准则到达的图形卡驱动次。。WARP是因此一种纯软件到达的图形使勃起。,它将与用双手触摸、举起或握住零碎一同颁布。。翘面可以在CPU上落实复杂的图形工作。,它还可以落实复杂的计算工作。。为了有法律效力地落实Direct3D工作,它使用了多线状物技术。,本人也使用方带菌者子化。。当无物理成分GPU可购得的时,或许材料集较小。,最后部分常被使用。。事情检定,在这两种围绕下,最后部分是一种灵巧的的receiver 收音机。。

6 GPU并行技术

OpenGL,即吐艳图形库,可以追溯到1992。,它是一种跨讨论。、跨平台API说明书,它可认为2D图形和3D图形预约后退。。GPU计算银幕图像的色值和其他的书信。。OpenCL,即吐艳计算讨论,它是由于OpenGL的。,预约GPGPU充其量的。OpenCL看起来好像像C讨论。。它具有在C讨论中不可购得的的典型和效能。,但它也缺少已决定的C讨论的独特性。。使用OpenCL无力的将生长人员绑定到特派的图形卡或武器装备。。另一方面,由于OpenGL无二元系说明书。,到这程度,在举行下一步屯积,本人需求编辑OpenCL源。,或预编辑特派的目的机具。。本人可以找到多的器来文章。、编辑、OpenCL用功的受测验与调试。

Direct3D是到处技术的总称。,包罗用于Windows图形制作节目的DICT2D。 API和Direct3D API,它还包罗坦率地计算。。坦率地计算是后退GPGPU的API。,与OpenCL比喻。DirectCompute使用了一种非主流讨论——HLSL(资深的上色器讨论),它看起来好像很像C讨论。,但它与C讨论有很大的辨别。。HLSL普遍地使用于游玩生长中。,OpenCL讨论具有多种效能。。生长人员可以从CPU上运转的次行为准则开端。,在用功中编辑和运转HLSL行为准则段。像Direct3D家族的其他的盟员同上。,这两种行为准则当中的更番亦经过COM摇动到达的。辨别于OpenCL,将坦率地计算编辑成八位字节码。,伺侯嫁接的武器装备,这说明更多的架构可以被制作节目。。另一方面,它是特于Windows的。。

一致计算根底布置(计算) Device Unified Architecture,CUDA是指用于制作节目的武器装备和讨论。。NVIDIA公司生长的CUDA,独一无二的当用功摆设在一台电脑上时,才干使用该用功。。用功是CUDA。 由C构成,CUDA C故障C讨论。,但相似地C讨论。。CUDA C的向某人点头或摇头示意和效能与OpenCL和DirectCompu比喻。。讨论比OpenCL和DUNCTAUM高的。,在讨论中开展了本人更复杂的GPU转让脸色。。更,它还后退构成CPU和GPU当中共享的行为准则。。同时,死气沉沉的本人并行算法库称为煤烟弄脏。,它从C 说明书库的设计中抓取灵感。,目的是要明显预付CUDA生长人员的生产率。CUDA一向在活跃的人开展。,不时扩大某人的权力新的效能和库。。

使充分活动GPU效能的三种方法有其同一的的局限。。由于OpenCL是跨平台的。、穿插武器装备(至多源行为准则)、跨讨论的,因而这很复杂。。坦率地计算要故障在Windows零碎上使用。。事情上,CUDA只后退NVIDIA图形卡。。最重要的是,这三种办法不只需求结论新的API和新的办法来乐事PRO。,你还需求结论一种崭新的制作节目讨论。。各种的三种讨论都是C讨论。,但否完整是C。。独一无二的CUDA与C比喻。,OpenCL和DirectCompute都不克不及预约相似的典型中卫和泛型因此的C++茫然的。这些限度局限说明,主流生长者常常疏忽GPGPU,庶几乎使用更多的流通技术。。

成并行化的7个请求

在构成请求最大限度地使用同分异构现象的用功时,自然,本人需求知识摆设目的。。设想用功的设计最前部是为了杂多的典型的运转而设计的,有些电脑可以不使勃起可以后退加载的图形卡。,有些甚至十分无GPU处置充其量的。,本人的行为准则只得做的事可以处置杂多的落实围绕。,至多它可以在摆设的电脑上工作。,不管可以无稍微催促度。。

GPGPU的最前部开展,浮点小数点计算亦本人挑动。。后来,双行动精确的用双手触摸、举起或握住不完整可购得的。。同时,M的用双手触摸、举起或握住行动精确的和认不出处置成绩。。假设在瞄准,单行动精确的浮点小数点运算的响声要快于O,到底左右。。本人可以需求入伙必然的精力来决定O所需的行动精确的。,并且GPU如果真的能比CPU计当做更快。。一般状况下,此外后退对最前部武器装备举行浅渐变的=mathematics运算外,,GPU求助于预约双行动精确的的=mathematics计算充其量的。,对IEEE 754说明书一致的=mathematics办法。

知识将材料输入到GPU举行处置和从GPU到达输入终于的工夫本钱异样也很重要。设想此工夫的本钱超越GPU,则经过处置材料节省本钱。,此外使使用全部复杂,,无稍微救济金。本人只得有本人可以辨析GPU的功能辨析器。,这确保了在处置时可以到达现实的功能增益。。

为主流生长者,器的选择是异常重要的。。过来,GPGPU用功可以独一无二的多数用户。,他们本身执意生长者。。GPGPU进入主流集市,使用GPU来到达过剩处置充其量的的生长人员也不时地。这些用户将请求改善。,他们怀孕他们的用功在颁布新的PLA时是新的。,这可以需求时尚根底事情规定或计算。。制作节目用模子做、生长围绕、调试器只得后退生长人员举行苗条的以合适这些Chan-Chan.。设想只得使用辨别的器来生长辨别的行为准则段,比如,使用的调试器要故障处置CPU行为准则(或GPU行为准则)。,或许无GPU知觉的功能辨析器。,你会看见生长异构围绕很使烦恼。。已决定的器集,它助动词=have后退个人用户或预约后退的生长人员来被说成可供使用的的。,此外助动词=have后退非生长人员用户集团的生长人员来说,,不必然可供使用的。。并且,生长新的与接触并行制作节目不太可以构成I;器只得后退迭代的方法。,生长人员可以担心他们的用功的功能。,话说回来算法和材料布置的设计发生。。

关于本站

优博时时彩 - 优博时时彩平台 - 优博平台


微博:大品牌游戏

专注:大品牌游戏

简介:体育资讯第一站