Ich habe ein signiertes Char in OpenCL, das ich in ein unsigniertes Zeichen konvertieren muss.Wie konvertiert man in OpenCL signed in unsigned char?
Antwort
C-like Casting sollte funktionieren. Der einzige Unterschied ist, dass Sie cl_ types verwenden. Aber diese entsprechen den C-Typen.
Zum Beispiel, unsigned char zu konvertieren unterzeichnet:
cl_char c = 0xF;
cl_uchar uc = c;
einen Zeiger auf signed char Zur Umrechnung in unsigned char auf Zeiger:
cl_char* cArr = // Points to char array
cl_uchar* ucArr = (cl_uchar*) cArr; // Access char array as uchar array
alle diese 'cl_' Präfix Typen sind API-Typen für den Einsatz in Host-Code. Ich denke nicht, dass das die Frage ist. – talonmies
Der Standard OpenCL explicit conversion functions für alle gebaut definiert Skalar- und Vektortypen. So können Sie etwas tun:
char signed_val = 10;
uchar unsigned_val = convert_uchar(signed_val);
Talonmies: Danke für die Information. Irgendeine Idee, warum diese Umwandlungsfunktionen anstelle des normalen Castings benötigt werden? –
@Ashwin: Die Fließkommawerte bieten eine explizite Kontrolle über die verschiedenen IEEE-754-Rundungsregeln, was beim Gießen nicht der Fall ist. Die Funktionen unterstützen auch alle OpenCL-spezifischen Vektortypen, die im Standard C99 nicht existieren. Ansonsten denke ich, dass es für eine konsistente Schnittstelle und für bessere Programmierpraktiken ist - sie zwingen den Programmierer, explizit ein Konvertierungsverhalten zu wählen, was IMHO immer eine gute Sache ist. – talonmies
Talonmies: Wenn ich richtig verstehe, gibt es nichts Besonderes, was die Konvertierungsfunktionen für die Konvertierung von Char-uchar tun. In jedem Fall ist Ihre Antwort die bessere und ich werde das Poster bitten, Ihre Wahl zu treffen. –
Ich nehme meinen Sie innerhalb eines OpenCL Kernel – talonmies