mboost-dp1

Microsoft Corporation

Microsoft lancerer C++ til GPU’en

- Via Sutter's Mill - , redigeret af Emil , indsendt af thimon

Netop som AMD har lanceret deres første APU, der er en processor, som indeholder fire normale x86-kerner og har 400 GPU-kerner, har Microsoft oplyst, at de vil gøre det nemmere at udnytte GPU’er ved at tilføje C++ Accelerated Massive Parallelism-udvidelsen til Visual Studio 2012, når denne frigives.

C++ Accelerated Massive Parallelism (AMP) skal gøre det muligt for programmører at lave programmer i C++, der kan afvikles på GPU’er, hvilket åbner op for, at langt flere kan udnytte GPU’er, da de i dag er ret komplicerede at kode til.

AMP afvikles via DirectCompute i DX11, så et program lavet via AMP vil kunne afvikles på en hvilken som helst GPU, der understøtter DirectCompute, men med tiden forventes det, at AMP kan snakke direkte med hardwaren.





Gå til bund
Gravatar #1 - Talkar
20. jun. 2011 17:28
Kompliceret og kompliceret at kode til en GPU kommer meget an på hvilken GPU vi snakker om. CUDA programmering er relativt simpel i forhold til at programmere til fx en ATI GPU.
Gravatar #2 - ipwn
20. jun. 2011 18:08
Det skal jeg helt klart benytte mig af!

Har planer om at bikse en server sammen med en 4 GPU'er, så jeg kan kværne nogle tal. Kunne også gøres i CUDO og OpenCL, men nu da det her kommer, og C++ er en af mine styrker, så tager jeg da imod det med åbne arme :)
Gravatar #3 - Hubert
20. jun. 2011 18:53
De har tydeligvis ikke hørt at windcape siger at .net er fremtiden.
Gravatar #4 - arne_v
20. jun. 2011 19:25
#3

.NET er godt til rigtigt mange ting, men hardware tilgang er ikke en af dem.
Gravatar #5 - Windcape
20. jun. 2011 20:26
#3, #4

Vi laver da bare en C++.NET udgave af C++ AMP, så kører det på .NET, jep jep!

Eller p/invoke's fra C#!
Gravatar #6 - arne_v
20. jun. 2011 20:35
#5

Hverken p/Invoke eller mixed mode C++ goer at hardwaren tilgåes via .NET - det exposer bare en .NET wrapper for den native kode.

Det native kode er nødvendig.

Man kunne også sagtens forestille sig at MS kommer med en officiel .NET wrapper.

Men givet at number crunching typisk laves i native kode, så er det næppe en high priority.



Gravatar #7 - Windcape
20. jun. 2011 20:41
#6

Sarkasme er spildt på dig :p

Ej, spøg til side. F# kan nu også bruges til number crushing. Det er ihvertfald noget nemmere at parallelisere F#/C#, end C++ til regulare CPU'er.

Men AMP har jo et helt andet formål.

Jeg synes dog det er sørgeligt at man stadigvæk er af den opfattelse af C++ er det eneste sprog der kan bruges til formålet. Hvorfor ikke f.eks. OCaml?
Gravatar #8 - onetreehell
20. jun. 2011 20:48
#7
Er F# godt til at parallelisere? SVJV så minder F# meget om ocaml, og ocaml har aldrig rigtig været god til shared memory multiprocessing (selvom der findes gode libraries til distributed MP, men det er noget andet).

Edit: dvs. ocaml har ikke understøttet multicores indtil nogen lavede en compiler som jeg ikke er klar over hvor god er.
Gravatar #9 - Windcape
20. jun. 2011 20:51
#8

Det skal jeg ikke kunne sige. Jeg går sjældent så dybt ned. Men jeg tror ikke at det er dårligere end f.eks. Erlang.

Spørgsmålet er nok om hvilke type operationer der skal arbejdes med. Hvis der kræves mere detaljeret memory kontrol, er C++ sikkert stadigvæk bedst.

Selvom vi snart burde finde en afløser for C++, med en mindre sindsyg syntaks.
Gravatar #10 - onetreehell
20. jun. 2011 21:00
#9
C++ har den fordel, når man snakker parallell computing, at det ikke er garbage collected. Parallell GC er hammersvært/ineffektivt.
Gravatar #11 - Windcape
20. jun. 2011 21:10
#10

Mjah, GC er jo sådan mere eller mindre optimal når vi ikke er i en .NET/Java context.

Jeg tænkte også mere på ren OCaml eller ML. De kan også kompileres til native code svjv, men selve sprogene er en del mere sane, end C++.
Gravatar #12 - onetreehell
20. jun. 2011 21:13
Windcape (11) skrev:
#10

Mjah, GC er jo sådan mere eller mindre optimal når vi ikke er i en .NET/Java context.

Jeg tænkte også mere på ren OCaml eller ML. De kan også kompileres til native code svjv, men selve sprogene er en del mere sane, end C++.

???(!)
Gravatar #13 - Windcape
20. jun. 2011 21:17
#12

Du skal bruge et sprog der

a) kompileres til native code
b) kan arbejde med memory direkte
c) ikke har tvunget GC

C++ er altså ikke det eneste der findes.

(Har jeg drukket for meget rødvin allerede?)
Gravatar #14 - arne_v
21. jun. 2011 00:24
Windcape (7) skrev:
F# kan nu også bruges til number crushing. Det er ihvertfald noget nemmere at parallelisere F#/C#, end C++ til regulare CPU'er.


onetreehell (8) skrev:
Er F# godt til at parallelisere? SVJV så minder F# meget om ocaml, og ocaml har aldrig rigtig været god til shared memory multiprocessing


Windcape (9) skrev:
Det skal jeg ikke kunne sige. Jeg går sjældent så dybt ned. Men jeg tror ikke at det er dårligere end f.eks. Erlang.


Nu skal vi være meget påpasselige med hvad vi diskuterer.

"godt" er sådan en lidt bred term.

Snakker vi "nemt at skrive parallelle programmer som er korrekte" eller "maksimerer performance på parallele systemer"?

Erlang er rigtigt god til det første og rigtigt dårligt til det andet.
Gravatar #15 - arne_v
21. jun. 2011 00:27
onetreehell (10) skrev:

C++ har den fordel, når man snakker parallell computing, at det ikke er garbage collected. Parallell GC er hammersvært/ineffektivt.


Parallel GC performer fint.

Problemerne ligger i real time egenskaberne (pauser).

Men det er ikke et problem for number crunching.
Gravatar #16 - arne_v
21. jun. 2011 00:31
#sprog til number crunching

Grundene til at Fortran/C/C++ er så dominerende er vel:

* det er de sprog som diverse biblioteker (LINPACK, BLAS etc.) kommer med bindings til

* det er sprog som ikke checker for array index out of bounds (det kan godt være dyrt for heftige matrix beregninger)

* det er sprog som gør det nemt at interface hardware (embedde eller linke med assembler)

* det er sprog hvor compiler optimizere traditionelt er gode

* den selvforstærkende effekt af at det bruger alle andre
Gravatar #17 - onetreehell
21. jun. 2011 06:28
#14
Jeg snakker om "maksimerer performance på parallele systemer". Ocaml har (havde) ikke support for parallelle tråde.

#15
Det kunne jeg godt tænke mig nogle kilder på.
Gravatar #18 - Windcape
21. jun. 2011 09:00
Og jeg snakkede om
arne_v (14) skrev:
"nemt at skrive parallelle programmer som er korrekte"


Gravatar #19 - kyp33
21. jun. 2011 10:35
Jer der snakker om en udgave af det til .NET kunde måske tage et gik på http://www.yourfilelink.com/get.php?fid=697999 hvor vi laver noget tilsvarende til .NET selv om at det dog bruger CUDA
Gravatar #20 - Windcape
21. jun. 2011 11:47
#19

Første post nogensinde, med et random download link. I think I'll pass :p
Gravatar #21 - qed
21. jun. 2011 12:00
Windcape (20) skrev:
Første post nogensinde, med et random download link. I think I'll pass :p


Det er en PDF med hans kandidat-afhandling.
Gravatar #22 - Windcape
21. jun. 2011 12:03
#21

Plejer man ikke at hoste den på universitets server, eller noget i den retning. (og forhelvede folkens, fix nu en dropbox i stedet for at bruge lorte download sider).

Stadigvæk, ikke et umiddelbart troværdigt link :p
Gravatar #23 - kyp33
21. jun. 2011 12:12
#22
Jo men efter som vi først skal op og forsvare det på Torsdag har universitetet ikke gjort den tilgængelig i nu og så er yourfilelink bare så meget letter end så meget andet ;-)

håber desuden på at vi en gang efter eksamen får taget os sammen til at få sat noget GPL på vores kode og lagt det på sourceforge :-)
Gravatar #24 - Windcape
21. jun. 2011 12:19
#23

SourceForge? Hvilket årtusinde lever du i?

Du mener at i vil putte LGPL på det, smide det på Github, og lave en NuGet package, yesh?
Gravatar #25 - arne_v
21. jun. 2011 13:02
onetreehell (17) skrev:
Det kunne jeg godt tænke mig nogle kilder på.


Et af de klassiske papirer er:
http://www.cs.colorado.edu/department/publications...

Det sammenligner C/C++ uden og med GC (men jeg vil tillade mig at antage at der er brugt mere tid på at optimere Java/.NET GC end C/C++ GC).

Gravatar #26 - onetreehell
21. jun. 2011 13:09
#25
Nu har jeg kun skimtet den igennem, men umiddelbart ser det ud til at være til singlecore programmer.
Gravatar #27 - arne_v
21. jun. 2011 13:11
#26

Papiret er fra 1992!

:-)

Gravatar #28 - arne_v
21. jun. 2011 13:15
#26

Når en Java/.NET GC kører skal den låse en gang imellem af hensyn til andre tråde.

Men det skal en C/C++ free/delete også.
Gravatar #29 - onetreehell
21. jun. 2011 13:49
I erlang har hver tråd sin egen lille heap og så er der en stor global heap for store (delte) objekter. Det betyder at det meste af al garbage collection kan foregå parallelt.

Erlang bruger så message passing, hvilket er lidt noget andet.

jeg *mener* ikke at et free() i en tråd har indflydelse på en anden tråd i samme process så længe den anden ikke også prøver. Det gælder i hvert fald for processer.
Gravatar #30 - arne_v
21. jun. 2011 14:11
#29

Erlang er anderledes.

Et free kald må nødvendigvis opdatere en data struktur som holder styr på hvad der er i brug og hvad der er frit. Hvis der ikke synkroniseres på tilganeg til det må der kunne ske nogle grimme ting.
Gravatar #31 - arne_v
21. jun. 2011 14:15
#29

http://linux.derkeiler.com/Newsgroups/comp.os.linu...

antyder at de "gør et eller andet" for at håndtere threads.
Gravatar #32 - arne_v
21. jun. 2011 14:33
#31

Det er iøvrigt en lille verden.

Af linket fremgår det at Linux/glibc malloc/free oprindeligt er udviklet af den samme osm har lavet java.util.concurrent.

Gravatar #33 - arne_v
22. jun. 2011 16:24
#32

Jeg har iøvrigt udvekslet email med ham engang ca. 1990 angående en fejl i big integer klassen i libg++ (fejlen var dog for længst rettet da jeg indrapporterede den - jeg sad bare med en gammel version).
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login