Vraag Welke parallelle programmeer-API's gebruikt u? [Gesloten]


Probeer grip te krijgen op hoe mensen momenteel parallelle code schrijven, gezien het immense belang van multicore en multi-processing hardware tegenwoordig. Voor mij lijkt het erop dat het dominante paradigma pthreads is (POSIX-threads), die native is op Linux en beschikbaar is op Windows. HPC-mensen gebruiken OpenMP of MPI, maar er zijn er niet veel op StackOverflow lijkt het. Of vertrouwt u op Java-threading, Windows threading-API's, enz. In plaats van de draagbare standaarden? Wat is volgens jou de aanbevolen manier om parallel programmeren uit te voeren?

Of gebruik je meer exotische dingen zoals Erlang, CUDA, RapidMind, CodePlay, Oz of zelfs het lieve oude Occam?

Verduidelijking: ik ben op zoek naar oplossingen die vrij draagbaar zijn en toepasbaar op platforms zoals Linux, verschillende unixen, op verschillende hostarchitecturen. Windows is een zeldzaam geval dat prettig is om te ondersteunen. Dus C # en .net zijn hier echt te smal, de CLR is een cool stukje technologie, maar kunnen ze het PLEASE voor Linux-host vrijgeven zodat het net zo overheersend is als de JVM, Python, Erlang of welke andere draagbare taal dan ook.

C ++ of JVM-gebaseerd: waarschijnlijk C ++, omdat JVM's de neiging hebben de prestaties te verbergen.

MPI: Ik ben het ermee eens dat zelfs de HPC-mensen het als een moeilijk te gebruiken hulpmiddel zien - maar voor het uitvoeren van 128000-processors is dit de enige schaalbare oplossing voor de problemen waarbij kaart / verkleinen niet van toepassing is. Het doorgeven van berichten heeft echter een grote elegantie, omdat het de enige programmeerstijl is die erg goed schikt naar lokaal geheugen / AMP, gedeeld geheugen / SMP, gedistribueerde run-time omgevingen.

Een interessante nieuwe mededinger is de MCAPI. maar ik denk niet dat iemand de tijd heeft gehad om daar nog praktische ervaring mee op te doen.

Dus over het algemeen lijkt de situatie te zijn dat er veel interessante Microsoft-projecten zijn waarvan ik niet wist en dat Windows API of pthreads de meest gebruikelijke implementaties in de praktijk zijn.


16
2017-10-03 13:04


oorsprong


antwoorden:


MPI is niet zo moeilijk als de meeste het laten lijken. Tegenwoordig denk ik dat een aanpak met meerdere paradigma's het meest geschikt is voor parallelle en gedistribueerde applicaties. Gebruik MPI voor uw knooppunt om communicatie en synchronisatie te knoopen en OpenMP of PThreads voor uw meer granulaire parallellisatie. Denk aan MPI voor elke machine en OpenMP of PThreads voor elke kern. Dit lijkt een beetje beter te schalen dan een nieuwe MPI Proc voor elke kern te ontwikkelen voor de nabije toekomst.

Misschien voor dual- of quad-core op dit moment, zal het paaien van een proc voor elke core op een machine niet zoveel overhead hebben, maar naarmate er meer en meer cores per machine worden benaderd, waar de cache en het geheugen van de chip niet zoveel scalen, het zou geschikter zijn om een ​​gedeeld geheugenmodel te gebruiken.


10
2017-11-21 14:42



Ik zou aanraden OpenMP. Microsoft heeft het in de Visual C ++ 2005-compiler geplaatst, dus het wordt goed ondersteund, en u hoeft niets anders te doen dan compileren met de / omp-richtlijn.

Het is eenvoudig te gebruiken, hoewel het duidelijk niet alles voor je doet, maar dan doet niets. Ik gebruik het voor parallel lopen voor loops, meestal zonder enige moeite, voor complexere dingen heb ik de neiging om de mijne te rollen (ik heb bijvoorbeeld de code van vroeger die ik heb geknipt, geplakt en gewijzigd).

Je kan het proberen Cilk ++ dat ziet er goed uit, en heeft een e-book "Hoe de Multicore Software Revolution te overleven".

Beide soorten systemen proberen de seriële code te parallelliseren - dwz neem een ​​for-lus en voer het op alle kernen tegelijk uit op een zo eenvoudig mogelijke manier. Ze zijn meestal geen algemene threadbibliotheken. (bijv onderzoeksdocument(pdf) beschreef de prestaties van verschillende soorten threadpools geïmplementeerd in openMP en stelde voor om er 2 nieuwe operaties aan toe te voegen - opbrengst en slaap. Ik denk dat ze daar een beetje het puntje van OpenMP missen)

Zoals je OpenMP noemde, neem ik aan dat je het hebt over native c ++, niet C # of .NET.

Ook als de HPC-mensen (waarvan ik aanneem dat ze experts zijn in dit soort domein) OpenMP of MPI lijken te gebruiken, dan is dit wat u zou moeten gebruiken, niet wat het lezerspubliek van SO is!


6
2017-10-03 13:42



We zijn begonnen naar te kijken parallelle extensies van Microsoft - het is nog niet in de release, maar laat zeker potentieel zien.


4
2017-10-03 13:08



Ik heb gebruikt AAS om ontwikkelaars in staat te stellen POSIX (of windows) style threading te gebruiken op elk platform.


3
2017-10-03 13:10



Parallel FX-bibliotheek (PFX) - een beheerde concurrency-bibliotheek die wordt ontwikkeld door een samenwerking tussen Microsoft Research en het CLR-team bij Microsoft voor opname in een toekomstige herziening van het .NET Framework. Het bestaat uit twee delen: Parallel LINQ (PLINQ) en Task Parallel Library (TPL). Het bestaat ook uit een reeks coördinatiegegevensstructuren (CDS) - een set gegevensstructuren die worden gebruikt om de uitvoering van gelijktijdige taken te synchroniseren en te coördineren. De bibliotheek is op 29 november 2007 als CTP uitgegeven en in december 2007 en juni 2008 opnieuw ververst.

Niet veel ervaring echter ...


2
2017-10-03 13:16



Houd er rekening mee dat de antwoorden hier niet een statistisch representatief antwoord zijn op "daadwerkelijk gebruiken". Al zie ik een aantal "X is leuk" antwoorden.

Persoonlijk heb ik Windows Threads op veel van een project gebruikt. De andere API die ik veel heb gezien, is pthreads. Op het HPC-front wordt MPI nog steeds serieus genomen door de mensen die het gebruiken <subjective> Ik doe het niet - het combineert alle elegantie van C ++ met de prestaties van Javascript. Het overleeft omdat er geen fatsoenlijk alternatief is. Het zal verliezen aan lichtgekoppelde NUMA-machines aan de ene kant en aan Google-stijl aan de andere kant verkleinen. </subjective>


2
2017-10-03 14:45



Meer Gegevens parallelle Haskell zou leuk zijn, maar zelfs zonder dit heeft GHC> 6.6 een indrukwekkend vermogen om algoritmen eenvoudig via, parallel te parallelliseren Control.Parallel.Strategies.


2
2017-10-05 01:37



Voor .Net heb ik met groot succes gebruikt RetLang. Voor de JVM, Schaal is geweldig.


1
2017-10-03 13:31



Wat dacht je van Open CL?


1
2017-12-19 09:15