[OPENCL]Addition zum Pointer oder eine Adresse rauskriegen mit & geht in OPENCL nicht?
-
Hallo Zusammen,
Man sagt dass Opencl C99 oder sogar neuere C Standart erfüllt, auf papier.
Aber ein Stück von Code geht die normale Verwahlten von Pointer nicht,
z.B. Zeiger auf 2 Bytes ( unsigned short) in Datenarray auszuwählen:__global unsigned char * buffer;... ... unsigned int tolookPos = (irgendein Zahl) unsigned short *l2Num = &(buffer[tolookPos]);// << SYNTAXFEHLER!!!!
Es geht auch nicht mit unsigned char * l2Num,
oder mitunsigned short *l2Num = buffer + tolookPos
verschiedene Kasten wie (unsigned short
sind auch voll egal.
wie kriege ich den Blöden Pointer auf 2 bytes raus? Und generell,
was ich für ein Problem in GPGPU mit Pointer so umzugehen?
Oder wird es da irgendwie anders gescheirben?als ich weiss, in CUDA wäre es erlaubt
... = &(buffer[tolookPos]);
und nicht = buffer + tolookPos;
was eigentlich dasselbe ist.P.S. S T A N D A R T ist kein Beleidigung desweger die Sterne daraus zu machen ist unangemessen
-
Du bist da gerade im Bereich der Variablendefinition. Da ist einiges anders
Wo zeigt denn buffer hin?Wie lautet die genaue Fehlermeldung?
o4kareg schrieb:
P.S. S T A N D A R T ist kein Beleidigung desweger die Sterne daraus zu machen ist unangemessen
Trotzdem ist es falsch.
Angemessen wäre, sich über die richtige Schreibweise zu informieren.
Die Art und Weise wie Etwas/Jemand steht hat damit nichts zu tun.
-
Nein, es ist innerhalb eine Methode die als eine Eingabewariable den buffer
Zeiger(Array) hat. Anstatt von o.g. Codefragment funktioniert voll richtig
dieses :unsigned short l2Num = buffer[tolookPos] << 8 + buffer[tolookPos+1] ;
Hier habe ich aber extra die Rechneroperationen.
-
o4kareg schrieb:
Man sagt dass Opencl C99 oder sogar neuere C stan**** erfüllt, auf papier.
In der Wikipedia ist nur von "basiert" und nicht von "erfüllt" die Rede. Explizit sind auch Einschränkungen erwähnt. Beispielsweise dürfte demnach Deine Pointerarithmetik nur bei Arrays fester Länge funktionieren.
Gestehe, dass ich keinerlei Erfahrung damit habe, aber aus dem wenigen Gelesenen erscheint mit Deine Fehlermeldung nur logisch.
Ciao, Allesquatsch
-
Ist es auf deinem System überhaupt möglich, ein short auf eine ungerade Adresse zu legen?
-
DirkB schrieb:
Ist es auf deinem System überhaupt möglich, ein short auf eine ungerade Adresse zu legen?
1)Wieso nicht?
2) Ist erst egal da dies als SYNTAXFEHLER bezeichnet wird nicht laufzeitfehler oder so.
Genauer kann ich nicht sagen, in OpenCL bekommt man keine klare Fehlermeldung, höchstens kann man rauskriegen in welcher Zeile das Fehler ist.
-
o4kareg schrieb:
P.S. S T A N D A R *
Ist eine wohl eine Beleidigung, für die Augen.
Würde mich nicht wundern wenn in OpenCL so einiges nicht geht, ist ja schließlich von Apple, kann also nur Kappes sein.
-
Warum machst du kein Array fester Länge?
-
Dein
buffer
liegt offenbar im__global
Adressraum, also solltel2Num
wohl auch dort hinzeigen:__global unsigned short *l2Num = &(buffer[tolookPos]);
o4kareg schrieb:
DirkB schrieb:
Ist es auf deinem System überhaupt möglich, ein short auf eine ungerade Adresse zu legen?
1)Wieso nicht?
Alignment und so, sollte aber eher nur für die Performance eine Rolle spielen...
o4kareg schrieb:
- Ist erst egal da dies als SYNTAXFEHLER bezeichnet wird nicht laufzeitfehler oder so.
Genauer kann ich nicht sagen, in OpenCL bekommt man keine klare Fehlermeldung, höchstens kann man rauskriegen in welcher Zeile das Fehler ist.
Du könntest uns den GENAUEN Syntaxfehler nennen, den der Compiler dir gibt...
- Ist erst egal da dies als SYNTAXFEHLER bezeichnet wird nicht laufzeitfehler oder so.
-
Da OpenCL keinerlei dynamische Speicherstrukturen in den Kernels erlaubt, denke ich dass Zeiger allgemein nicht (richtig) definiert sind.
-
MisterX schrieb:
Da OpenCL keinerlei dynamische Speicherstrukturen in den Kernels erlaubt, denke ich dass Zeiger allgemein nicht (richtig) definiert sind.
Ich hab keine Ahnung von was du redest...