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 [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