Gå til innhold

Nyhet: OpenCL driver++ (nvidia) tilgjengelig


Anbefalte innlegg

Videoannonse
Annonse

Hmmm jeg synes OpenCL er litt teit laget, siden det av en eller annen grunn ikke støtter rekursive funksjoner (som får nVidia compileren til å bare avslutte programmet)

Det er heller ikke støtte for float3, men derimot float4, float8 og float16.

 

typedef struct
{
 char hei;
}hallo;

har ingen effekt (slik som i C)

en må skrive

struct hallo
{
 char hei;
};

og bruke den med "struct hallo" senere, ellers får en masse compile feil.

Det er heller ikke noen støtte for overloading (ikke ulikt C) som også er litt irriterende.

nVidia sin compiler fungerer heller ikke.

ptxas ptx input, line 341; error : Arguments mismatch for instruction 'selp'

: Retrieving binary for 'anonymous_jit_identity', for gpu='sm_11', usage mode='

341:if(t < 0.0f || t > 1.0f)
342:	return false;

Lenke til kommentar

OpenCL ligner veldig på CUDA på det området. Rekursive funksjoner er ikke mulig på GPU av en eller annen grunn. Kan være fordi det sjeldent er nødvendig og ofte er tregere enn en løkke. Mulig det er fordi det vil skape problemer pga. branching mangler. Er hvertfall ett designvalg nVidia har gjort i CUDA, og Khronos tydeligvis har gjort i OpenCL.

 

Helt enig i at det er litt teit, men teitest av det du har nevnt er jo klart mangelen på float3 datatype, som finnes i alle shaderspråk.

Lenke til kommentar

CUDA arkitekturen kan ikke rekursere fordi det ikke finnes noen stack. Det er også grunnen til at man ikke har funksjonspekere. Alle funksjoner som kalles blir inlinet. Du kan fint branche på CUDA, men dersom ikke alle trådene i et warp ikke tar samme branch så vil de trådene bare være gjøre no-ops til branchen er ferdig (koden blir serialisert).

Lenke til kommentar

Vet det går fint å branche, men problemet ligger i at det, som i f. eks. også på CELL prosessoren, ikke er veldig effektivt. Derfor vil ting som f. eks. unrolle løkker øke hastigheten på applikasjonen din.

 

Viste derimot ikke at de andre trådene i warpen ville kjøre no-ops til resten var ferdig.

Endret av NevroMance
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...