C++AMP

C++ Accelerated Massive Parallelism ( C++ AMP for kort ) er et DirectX 11 -baseret bibliotek og åben specifikation skabt af Microsoft til at implementere parallelle programmer til hybridsystemer i C++. C++AMP-systemet giver dig mulighed for at overføre beregninger til GPU'er (videoacceleratorer) uden at foretage et stort antal ændringer i programmer. Kode, der ikke kan køre på GPU'en, for eksempel på grund af dens kompleksitet, vil automatisk blive kørt på CPU'en ved hjælp af SIMD (SSE) instruktioner. Microsofts implementering af systemet (den eneste hidtil) er inkluderet i Visual Studio 2012 og inkluderer en debugger og profiler. Support til andre platforme og hardware kan implementeres af Microsoft eller andre i fremtiden.

Microsofts første udgivelse af C++ AMP kræver Windows 7 eller Windows Server 2008 R2. [en]

Syntakskonstruktionen " restrict(amp)" er blevet tilføjet til sproget, som kan specificeres for enhver funktion (inklusive en lambda-funktion), hvilket indikerer, at den kan udføres på C++ AMP-acceleratoren. Begræns-nøgleordet i dette tilfælde betyder, at compileren skal vurdere, om den givne funktion er egnet til GPU'en (om den kun bruger de funktioner i C++-sproget, som kan udføres på de fleste GPU'er).

Eksempel på brug:

void myFunc () limit ( amp ) { // Funktionskode }

Microsoft eller andre fremtidige leverandører af C++ AMP-kompatible systemer kan tilføje andre restriktive specifikationer ud over "amp".

Resten af ​​C++ AMP er tilgængelig via en header-fil <amp.h>og "concurrency"-navneområdet. C++ AMP-kerneklasser: array (databeholder for acceleratoren), array_view (dataindpakning), index (punktkoordinater i N-dimensionelt kartesisk rum med heltalskoordinater), udstrækning (N-dimensional heltalsdimension), accelerator (beregningsenhed, f.eks. , GPU, hvorpå hukommelse vil blive allokeret, og beregningen vil blive startet), accelerator_view (acceleratorvisning).

Der er også defineret en global funktion, parallel_for_eachder giver dig mulighed for at definere en parallel loop for C++ AMP.

Eksempel på C++-funktion, der bruger C++ AMP til at summere to 2D-arrays:

void AddArrays ( int n , int m , int * pA , int * pB , int * pSum ) { concurrency :: array_view < int , 2 > a ( n , m , pA ), b ( n , m , pB ), sum ( n , m , pSum ); concurrency :: parallel_for_each ( sum . omfang , [ = ]( concurrency :: index < 2 > i ) limit ( amp ) { sum [ i ] = a [ i ] + b [ i ]; }); }

Se også

Noter

  1. C++ AMP Resumé på én side Arkiveret 26. oktober 2012. // MSDN-blogs  

Litteratur

  • Kate Gregory, Ade Miller. C++ Amp: Accelerated Massive Parallelism With Microsoft Visual C++ - Microsoft, 2012—326 sider - ISBN 978-0-7356-6473-9
  • István Novák og andre. Starter Windows 8 applikationsudvikling. — John Wiley & Sons, 2012—624 sider — ISBN 978-1-118-22183-9 . Kapitel 13 "Oprettelse af Windows 8-program med C++". Afsnit "Brug af accelereret massiv parallelisme" , side 486-489
  • Sasha Goldstein og andre. Pro .NET-ydelse: Optimer dine C#-applikationer. - Apress, 2012-372 sider - ISBN 978-1-4302-4458-5 . Kapitel 6 "Samtidighed og parallelisme". Afsnit "GPU-databehandling til generelle formål" , side 205—214

Links