In meinem OpenCL-Programm werde ich mit mehr als 60 globalen Speicherpuffern enden, auf die jeder Kernel zugreifen müssen muss. Was ist die empfohlene Methode, um jedem Kernel die Position jedes dieser Puffer mitzuteilen?Korrekte Art, OpenCL-Kernel vieler Speicherobjekte zu informieren?
Die Puffer selbst sind während der gesamten Lebensdauer der Anwendung stabil - das heißt, wir ordnen die Puffer beim Start der Anwendung zu, rufen mehrere Kernel auf und geben die Puffer nur auf der Anwendungsseite frei. Ihr Inhalt kann sich jedoch ändern, wenn die Kernel von ihnen lesen/schreiben.
In CUDA, die Art und Weise, die ich dies tat, war die Erstellung von mehr als 60 Programmumfang globale Variablen in meinem CUDA-Code. Ich würde dann auf dem Host die Adresse der Gerätepuffer schreiben, die ich diesen globalen Variablen zugewiesen habe. Dann würden Kernel diese globalen Variablen einfach verwenden, um den Puffer zu finden, mit dem sie arbeiten mussten.
Was wäre der beste Weg, dies in OpenCL zu tun? Es sieht so aus, als ob die globalen Variablen von CL ein bisschen anders sind als die von CUDA, aber ich kann keine klare Antwort darauf finden, ob meine CUDA-Methode funktionieren wird und wenn ja, wie die Pufferzeiger in globale Variablen übertragen werden. Wenn das nicht funktioniert, was ist sonst der beste Weg?
Die 60 Argumente sind, weil dieser Code von einem speziellen Code-Synthesizer für ein Forschungsprojekt erzeugt wird, zu dem ich gehört. Leider kann ich diesen Teil nicht kontrollieren. Ich habe am Ende die Pufferpackungsmethode verwendet, die Sie beschrieben haben. Hoffentlich ist es eine bessere Methode als 60 Argumente. Danke für Ihre Hilfe! – int3h