Ich habe einen OpenCL-Code, der perfekt auf meinem MAC funktioniert. Aber wenn ich Portierung auf eine EC2 g2.2xlarge Instanz, der gibtArray im OpenCL-Kernel deklarieren funktioniert nicht. (clBuildProgram (-11))
Exception
ERROR: clBuildProgram(-11)
nun nach vielen Debugging, fand ich heraus, dass der Kernel einen Syntaxfehler hat. Nachdem es Verengung weiter nach unten, fand ich, dass der Fehler in der folgenden Zeile ist:
int size_a = POP_SIZE/4/numberOfDevices;
int aliveIndividualsIndex[size_a];
Wenn ich versuche:
int aliveIndividualsIndex[40];
dann funktioniert es auf der EC2-Instanz zu.
Warum unterscheiden sich MAC und EC2-Instanz vom selben Kernel-Code? Warum erkennt einer von ihnen den Code und warum gibt der andere einen Syntaxfehler? Wie repariere ich es? Weil ich [size_a] benutzen muss.
Beide verwenden OpenCL 1.2. Wenn Sie weitere Informationen über die Versionen von gcc oder g ++ oder etwas anderes benötigen, fragen Sie bitte, ich werde sie zur Verfügung stellen.
Es ist Es ist nicht möglich, dynamische Laufzeitarrays in CL zu erstellen. Der Speicherbedarf sollte zur Kompilierungszeit bekannt sein, um eine ordnungsgemäße Speicherzuweisung für den Kernel zu ermöglichen. Wenn der Code unter einigen Plattformen nicht fehlschlägt, scheint er einen permissiven Compiler zu verwenden, weil er auf der CPU läuft. – DarkZeros