Ich möchte ein lokales Array innerhalb meines OpenCL-Kerns erstellen, dessen Größe von einem Parameter des Kernels abhängt. Es scheint, dass das nicht erlaubt ist - zumindest mit AMD APP.Array-Deklaration variabler Länge in OpenCL nicht erlaubt - warum?
Ist Ihre Erfahrung anders? Vielleicht ist es nur die APP? Oder gibt es hier ein paar Gründe?
Edit: Ich würde jetzt vorschlagen, dass Arrays variabler Länge auch im CPU-seitigen Code erlaubt sein sollten, und es war ein unglücklicher Ruf des C-Standardkomitees; aber die Frage steht.
Dies ist die Problemumgehung, die ich benutze, aber - da dies möglich ist, warum sollte ich nicht nur in der Lage sein, ein lokales Array entweder durch die Deklaration eines Array variabler Länge oder Aufruf einer OpenCL malloc-ähnliche Funktion zuzuweisen? – einpoklum
Ich denke, es hat mit vielen der heutigen Geräte zu tun, die diese Informationen im Voraus wissen müssen, damit sie sicher validieren und zuweisen können. Ich weiß noch nicht, dass AMDs GCN-Architektur gpu-seitige malloc-Aufrufe unterstützen wird. – mfa
Wenn das erlaubt war, dann sollten Sie in der Lage sein, den Gerätespeicher dynamisch innerhalb des Kernels zuzuordnen, Zuweisungsfehler zurückzugeben, etc ... Und das ist in der GPU nicht möglich. Auf der Kernel-Ebene muss alles statisch sein. Wie sie sagten, besteht die einzige Möglichkeit darin, sie aus dem Host-Code zu setzen. – DarkZeros