Skalbar parallellism

Programvara sägs uppvisa skalbar parallellism om den kan använda sig av ytterligare processorer för att lösa större problem, dvs denna term syftar på programvara som Gustafsons lag gäller. Tänk på ett program vars exekveringstid domineras av en eller flera slingor, var och en av dessa uppdaterar varje element i en array --- till exempel följande stencilberäkning med ändlig differens värmeekvation :

    
     för  t := 0  till  T  gör  för  i := 1  till  N-1  gör  nytt(i) := (A(i-1) + A(i) + A(i) + A(i+1)) * .25 // explicit framåtskillnad med R = 0,25  slut  för  i := 1  till  N  -1  till  A(i) := new(i)  slutslut 

I ovanstående kod kan vi exekvera alla iterationer av varje "i"-loop samtidigt, dvs förvandla var och en till en parallell loop . I sådana fall är det ofta möjligt att effektivt använda dubbelt så många processorer för ett problem med matrisstorlek 2N som för ett problem med matrisstorlek N. Som i detta exempel är skalbar parallellism typiskt sett en form av dataparallellism . Denna form av parallellism är ofta målet för automatisk parallellisering av loopar .

Distribuerade datorsystem och icke-enhetliga minnesaccessarkitekturer är vanligtvis de lättast att skala till ett stort antal processorer, och skulle därför tyckas vara ett naturligt mål för programvara som uppvisar skalbar parallellism. Det kan dock hända att applikationer med skalbar parallellism inte har parallellitet med tillräckligt grov kornighet för att köras effektivt på sådana system (såvida inte programvaran är pinsamt parallell ). I vårt exempel ovan är den andra "i"-slingan pinsamt parallell, men i den första slingan kräver varje iteration resultat som producerats i flera tidigare iterationer. Således, för den första slingan, kan parallellisering innebära omfattande kommunikation eller synkronisering mellan processorer, och således endast resultera i en nettohastighetsuppgång om sådana interaktioner har mycket låg overhead, eller om koden kan transformeras för att lösa detta problem (dvs. genom kombinerad skalbar lokalitet / skalbar parallellism optimering).

språk

  • Ateji PX en förlängning av Java som gör skalbar parallellism möjlig på Java Virtual Machine (JVM)
  • BMDFM binär modulär dataflödesmaskin
  • SequenceL är ett allmänt funktionellt programmeringsspråk, vars primära designmål är prestanda på flerkärnig hårdvara, enkel programmering och kodtydlighet/läsbarhet

externa länkar