C++AMP

C++ Accelerated Massive Parallelism ( pe scurt C++ AMP ) este o bibliotecă bazată pe DirectX 11 și o specificație deschisă creată de Microsoft pentru a implementa programe paralele pentru sisteme hibride în C++. Sistemul C++AMP vă permite să transferați calcule pe GPU-uri (acceleratoare video) fără a face un număr mare de modificări la programe. Codul care nu poate rula pe GPU, de exemplu din cauza complexității sale, va fi rulat automat pe CPU folosind instrucțiuni SIMD (SSE). Implementarea sistemului de către Microsoft (singura de până acum) este inclusă în Visual Studio 2012 și include un depanator și profiler. Suportul pentru alte platforme și hardware ar putea fi implementat de Microsoft sau de alții în viitor.

Lansarea inițială a Microsoft C++ AMP necesită Windows 7 sau Windows Server 2008 R2. [unu]

Construcția de sintaxă „ restrict(amp)” a fost adăugată limbajului, care poate fi specificat pentru orice funcție (inclusiv o funcție lambda), indicând faptul că poate fi executată pe acceleratorul C++ AMP. Cuvântul cheie restrict în acest caz înseamnă că compilatorul trebuie să evalueze dacă funcția dată este potrivită pentru GPU (dacă folosește doar acele caracteristici ale limbajului C++ care pot fi executate pe majoritatea GPU-urilor).

Exemplu de utilizare:

void myFunc () restriction ( amp ) { // Codul funcției }

Microsoft sau alți furnizori viitori de sisteme compatibile C++ AMP ar putea adăuga și alți specificatori de restricții în plus față de „amp”.

Restul C++ AMP este disponibil printr-un fișier antet <amp.h>și spațiul de nume „concurență”. Clasele de bază C++ AMP: matrice (container de date pentru accelerator), array_view (înveliș de date), index (coordonate punct în spațiu cartezian N-dimensional cu coordonate întregi), extindere (dimensiune întreg N-dimensională), accelerator (unitate de calcul, de ex. , GPU pe care va fi alocată memorie și va fi pornit calculul), accelerator_view (vedere accelerator).

De asemenea, este definită o funcție globală parallel_for_eachcare vă permite să definiți o buclă paralelă pentru C++ AMP.

Exemplu de funcție C++ care folosește C++ AMP pentru a suma două matrice 2D:

void AddArrays ( int n , int m , int * pA , int * pB , int * pSum ) { concurență :: array_view < int , 2 > a ( n , m , pA ), b ( n , m , pB ), sum ( n , m , pSum ); concurență :: paralel_pentru_fiecare ( sum . extent , [ = ]( concurență :: index < 2 > i ) restrict ( amp ) { suma [ i ] = a [ i ] + b [ i ]; }); }

Vezi și

Note

  1. Rezumat de o pagină C++ AMP Arhivat 26 octombrie 2012. // Bloguri MSDN  

Literatură

  • Kate Gregory, Ade Miller. C++ Amp: Paralelism masiv accelerat cu Microsoft Visual C++ - Microsoft, 2012—326 pagini - ISBN 978-0-7356-6473-9
  • István Novák și alții. Începerea dezvoltării aplicațiilor Windows 8. — John Wiley & Sons, 2012—624 de pagini — ISBN 978-1-118-22183-9 . Capitolul 13 „Crearea aplicației în stil Windows 8 cu C++”. Secțiunea „Utilizarea paralelismului masiv accelerat” , paginile 486-489
  • Sasha Goldstein și alții. Performanță Pro .NET: Optimizați-vă aplicațiile C#. - Apress, 2012-372 pagini - ISBN 978-1-4302-4458-5 . Capitolul 6 „Concurență și paralelism”. Secțiunea „General Purpose GPU Computing” , paginile 205—214

Link -uri