~~NOTOC~~ ====== clCreateCommandQueue ====== Erzeugt eine CommandQueue für ein bestimmtes Gerät mit bestimmten Eigenschaften.
In OpenCL 2.0 hat sich der Funktionsname geändert in: clCreateCommandQueueWithProperties. Außerdem haben sich Parameter geändert. Bitte die Hinweise unter [[http://www.khronos.org/registry/cl/sdk/2.0/docs/man/xhtml/clCreateCommandQueueWithProperties.html|[2]]] beachten.
===== Signatur ===== cl_command_queue clCreateCommandQueue( cl_context context, cl_device_id device, cl_command_queue_properties properties, cl_int *errcode_ret) ===== Parameter ===== **context:** ein gültiger OpenCL Kontext. **device:** ein Device, was mit dem OpenCL Kontext in Verbindung steht. Entweder eines der Devices, was mit //clCreateContext// verwendet wurde, oder eines, welches dem Kritierium aus //clCreateContextFromType// übereinstimmt. **properties:** spezifiziert die Eigenschaften der Command Queue. Bitfeld. Nur folgende Eingeschaften sind gültig, ansonsten wird das Argument als ungültig angenommen: ^ Wert ^ Beschreibung ^ | CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | gibt an, ob die Kommandos, die in die Command Queue eingefügt werden in der richtigen reihenfolge ausgeführt werden (in-order) oder nicht (out-of-order). Falls gesetzt werden die Kommandos out-of-order ausgeführt, ansonsten in-order. Siehe Hinweise. | | CL_QUEUE_PROFILING_ENABLE | Gibt an ob Profiling aktiviert werden soll. | **errcode_ret:** Gibt einen entsprechenden Fehlercode zurück. Falls das Argument NULL sein sollte, wird kein Fehlercode zurückgeliefert. **Fehlermeldungen:** ^ Wert ^ Beschreibung ^ | CL_SUCCESS | Die Command Queue ist nicht 0 - die Funktion wurde erfolgreich ausgeführt. | | CL_INVALID_CONTEXT | //context// ist kein gültiger OpenCL-Kontext | | CL_INVALID_DEVICE | //device// bezeichnet kein gültiges OpenCL-Device oder das Device bezieht sich nicht auf den angegebenen Kontext. | | CL_INVALID_VALUE | die Werte von //properties// sind ungültig. | | CL_INVALID_QUEUE_PROPERTIES | Werte, die in //properties// angegeben sind sind gültig, werden aber vom Gerät nicht unterstützt. | | CL_OUT_OF_RESOURCES | Es ist ein Fehler beim Reservieren von Speicher aufgetreten, der für die OpenCL-Implementation auf dem Gerät gebraucht wird. | | CL_OUT_OF_HOST_MEMORY | Es ist ein Fehler beim Reservieren von Speicher aufgetreten, der für die OpenCL-Implementation auf dem Hostprozressor gebraucht wird. | ===== Rückgabewert ===== Identifer für das Command-Queue Objekt ===== Hinweise ===== OpenCL-Objekte wie Speicher, Programme und Kernel-Objekte werden mithilfe des OpenCL-Kontextes erstellt. Operationen auf diese Objekte können nur über die Command Queue erfolgen. Mehrere Command Queues pro Gerät sind möglich und dienen dazu nicht zusammenhängende Befehle einzureihen ohne irgendeine Art von Synchronisation. Das sollte nur benutzt werden, wenn die Objekte nicht geteilt werden, wenn sie geteilt werden sollen, dann muss die Applikation eine Synchronisation durchführen. **out-of-order / in-order-Ausführung**\\ Die Befehle werden in der Command Queue eingereiht, mithilfe des Parameters //properties// kann aber auch eine out-of-order Ausführung stattfinden. Wenn wir mithilfe von //clEnqueueNDRangeKernel// zwei Kernel A und B erzeugen (nacheinander), dann gehen wir bei in-order-Ausführung davon aus, dass Kernel A erst vollständig ausgeführt wird, bevor B startet. Das wird bei out-of-order Ausführung allerdings nicht mehr garantiert. Wenn wir bei out-of-order sicher stellen wollen, dass B begonnen wird, nachdem A vollständig ausgeführt ist, können wir bei //clEnqueueNDRangeKernel// für Kernel B in der //event_wait_list// angeben, dass wir auf A warten wollen. Des Weiteren können wir //clEnqueueMarkerWithWaitList// oder //clEnqueueBarrierWaitList// benutzen um sicherzustellen, dass beim ersten alle in der Waitliste angegebenen Events fertig aufgetreten sind, bevor die nächsten Aktionen begonnen werden, oder beim zweiten, dass alle vorher eingefügten Operationen fertig sind, bevor fortgefahren wird. ===== Siehe auch ===== * [[opencl:reference:clreleasecommandqueue|clReleaseCommandQueue]]