Per què la programació paral·lela basada en estàndards hauria d’estar a la vostra caixa d’eines d’HPC

Els desenvolupadors d’aplicacions HPC han confiat durant molt de temps en abstraccions de programació que es van desenvolupar i utilitzar gairebé exclusivament dins de l’àmbit de l’HPC tradicional. OpenMP es va crear fa més de 25 anys per simplificar la informàtica paral·lela de memòria compartida perquè els llenguatges de programació de l’època tenien poques o cap característiques i els proveïdors estaven desenvolupant les seves pròpies abstraccions incompatibles per al multiprocessament simètric.

CUDA C va ser dissenyat i llançat per NVIDIA el 2007 com a extensions del llenguatge C per donar suport a la programació de GPU massivament paral·leles, de nou perquè el llenguatge C no tenia les característiques necessàries per suportar el paral·lelisme directament. Tots dos models de programació han tingut un gran èxit perquè proporcionen les abstraccions necessàries per superar les mancances dels llenguatges que van ampliar d’una manera fàcil d’utilitzar.

El panorama ha canviat molt, però, en els anys des que aquests models es van llançar inicialment i és hora de reavaluar on haurien d’encaixar a la caixa d’eines d’un programador. En aquesta publicació discuteixo per què hauríeu de programar en paral·lel de manera nativa amb ISO C++ i ISO Fortran.

La programació paral·lela s’està convertint en l’estàndard

La programació paral·lela va ser una vegada un camp nínxol reservat només per a laboratoris governamentals, universitats de recerca i determinades indústries amb visió de futur, però avui és un requisit per a totes les indústries. Per això, els llenguatges de programació convencionals ara admeten programació paral·lela de manera nativa i un nombre creixent d’eines de desenvolupament admeten aquestes funcions. Ara és possible que es desenvolupin aplicacions per donar suport al paral·lelisme des del principi, sense necessitat d’un codi de línia base en sèrie.

Aquests codis de primer paral·lel es poden portar a qualsevol sistema informàtic, ja sigui basat en CPU multinucli, GPU, FPGA o algun altre processador nou que encara no hem pensat, i s’espera que funcioni el primer dia. Això allibera els desenvolupadors de la necessitat de portar aplicacions a nous sistemes i els permet centrar-se a optimitzar productivament la seva aplicació o ampliar-ne les capacitats.

NVIDIA ofereix tres enfocaments componibles per a la programació paral·lela: llenguatges estàndard accelerats, solucions portàtils basades en directives i solucions específiques de plataforma. Això ofereix als desenvolupadors opcions per optimitzar els seus esforços segons els seus objectius de productivitat, portabilitat i rendiment.

NVIDIA ofereix tres enfocaments de programació per a la nostra plataforma, tots ells basats en la nostra inversió durant dècades en biblioteques i compiladors accelerats. Tots aquests enfocaments són totalment componibles, donant al programador l’opció de com equilibrar millor els seus objectius de productivitat, portabilitat i rendiment.

Els idiomes ISO aconsegueixen rendiment i portabilitat

El desenvolupament de noves aplicacions s’hauria de realitzar mitjançant llenguatges de programació estàndard ISO i les característiques paral·leles que proporcionen. No hi ha millor exemple de models de programació portàtils que els llenguatges ISO, de manera que els desenvolupadors haurien d’esperar que les aplicacions escrites amb aquests estàndards s’executin a qualsevol lloc. Molts dels desenvolupadors amb els quals hem treballat han descobert que els guanys de rendiment de refactoritzar les seves aplicacions mitjançant el paral·lelisme basat en estàndards en C++ o Fortran ja són tan bons o millors que el seu codi existent.

Alguns desenvolupadors han optat per realitzar més optimitzacions mitjançant la introducció de directives portàtils, OpenACC o OpenMP, per millorar el moviment de dades o l’asincronia i obtenir un rendiment encara més elevat. Això resulta en un codi d’aplicació que encara és totalment portàtil i d’alt rendiment. Els desenvolupadors que vulguin obtenir el màxim rendiment en parts clau de les seves aplicacions poden optar per fer el pas addicional d’optimitzar parts de l’aplicació amb un enfocament de nivell inferior, com ara CUDA, i aprofitar tot el que ofereix el maquinari. I, per descomptat, tots aquests enfocaments interactuen molt bé amb les nostres biblioteques accelerades ajustades per experts.

Ampliar els estàndards per aprofitar les innovacions

Hi ha una idea errònia a la indústria que CUDA és el llenguatge que utilitza NVIDIA per bloquejar els usuaris, però de fet és el nostre llenguatge per innovar i exposar les característiques del nostre maquinari més directament. CUDA C++ i Fortran són, en molts aspectes, llenguatges de co-disseny, on podem exposar les innovacions de maquinari i repetir ràpidament el model de programació. Com que les millors pràctiques es desenvolupen en el model de programació CUDA, creiem que es poden i s’han de codificar en estàndards.

Per exemple, a causa dels èxits dels nostres clients en l’ús de l’aritmètica de precisió mixta, hem treballat amb el comitè de C++ per estandarditzar els tipus de coma flotant estès en C++23. Gràcies en gran part al treball del nostre equip de biblioteques de matemàtiques, hem treballat amb la comunitat per proposar una extensió C++ per a una interfície d’àlgebra lineal estandarditzada que s’ajusti bé no només a les nostres biblioteques, sinó també a les biblioteques pròpies i basades en la comunitat d’altres proveïdors. també. Ens esforcem per millorar la programació paral·lela i l’asincronia en els llenguatges estàndard ISO perquè és el millor per als nostres clients i per a la comunitat en general.

Què en pensen els desenvolupadors?

El professor Jonas Latt de la Universitat de Ginebra utilitza nvc++ i els algorismes paral·lels C++ a la biblioteca Pallabos i va dir que, “El resultat produeix un rendiment d’última generació, és altament didàctic i introdueix un canvi de paradigma en la programació multiplataforma de CPU/GPU a la comunitat”.

El doctor Ron Caplan de Predictive Science Inc. va dir sobre la seva experiència amb nvfortran i Fortran Do Concurrent: “Ara puc escriure moltes menys directives i encara espero un alt rendiment de les meves aplicacions Fortran”.

I Simon McIntosh-Smith de la Universitat de Bristol va dir quan va presentar els resultats del seu equip amb nvc++ i algorismes paral·lels: “Les versions ISO C++ del codi eren més simples, més curtes, més fàcils d’escriure i haurien de ser més fàcils de mantenir”.

Aquests són només alguns dels desenvolupadors que ja estan recollint els fruits de l’ús d’un paral·lelisme basat en estàndards en el seu desenvolupament.

Recursos de programació paral·lel basats en estàndards

NVIDIA té una sèrie de recursos per ajudar-vos a enamorar-vos del paral·lelisme basat en estàndards.

El nostre kit de desenvolupament de programari (SDK) HPC és un paquet de programari gratuït que inclou:

  • Compiladors NVIDIA HPC per a C, C++ i Fortran
  • El compilador CUDA NVCC
  • Un conjunt complet de biblioteques de matemàtiques accelerades, biblioteques de comunicació i biblioteques bàsiques per a estructures i algorismes de dades
  • Depuradors i perfiladors

L’SDK HPC està disponible gratuïtament a les plataformes x86, Arm i OpenPOWER, independentment de si teniu una GPU NVIDIA, i fins i tot és la pila de programari HPC d’Amazon per a Graviton3.

NVIDIA On-Demand també té diversos enregistraments rellevants per començar (proveu “No More Porting: Coding for GPUs with Standard C++, Fortran and Python”), així com les nostres publicacions al bloc de desenvolupadors de NVIDIA.

Finalment, us animo a registrar-vos al GTC tardor de 2022, on trobareu encara més xerrades sobre les nostres ofertes de programari i maquinari, inclosa més informació sobre la programació paral·lela basada en estàndards.

Jeff Lark, arquitecte principal d'aplicacions HPC de NVIDIA

Sobre Jeff Larkin

Jeff és un arquitecte principal d’aplicacions HPC a l’equip de programari HPC de NVIDIA. Li apassiona l’avenç i l’adopció de models de programació paral·lel per a la informàtica d’alt rendiment. Anteriorment va ser membre del grup Developer Technology de NVIDIA, especialitzat en anàlisi de rendiment i optimització d’aplicacions informàtiques d’alt rendiment. Jeff també és el president del comitè tècnic d’OpenACC i ha treballat tant en els organismes d’estàndards d’OpenACC com d’OpenMP. Abans d’unir-se a NVIDIA, Jeff va treballar al Cray Supercomputing Center of Excellence, situat al Laboratori Nacional d’Oak Ridge.

Leave a Comment

Your email address will not be published. Required fields are marked *