2017-05-04 1 views
0

Für eine OpenCL-Kernel-Ausführungszeit messen wir entweder verwendet ein:Wie beeinflussen das Betriebssystem und der Treiber das Timing des OpenCL-Kernels?

1- CPU Timer .. aber wir müssen bedenken, dass die OCL-Funktionen sind non-blocking daher müssen wir die clFinish() verwenden Routine zum Erreichen des vollen Durchsatzes.

2- GPU Timers .. das verwendet clGetEventProfilingInfo() Routine zusammen mit den CL_QUEUE_PROFILING_ENABLE Flag in Eigenschaften Argumente entweder clCreateCommandQueue() oder clSetCommandQueueProperty() Routinen Einstellung.

Wie können das Betriebssystem und die Treiberversion die Genauigkeit der Timer beeinflussen, die zur Messung der Ausführungszeit des Kernels verwendet werden?

Alles, was ich weiß, ist, dass wir das Gerät mit mindestens einen Kernel-Aufruf aufwärmen müssen, um die Latenz der OpenCL-Ressourcenallokation am Anfang zu absorbieren.

Antwort

0

1- Sie erhalten keine genauen Timings, wenn Sie nur CPU-Timing aufgrund nicht blockierenden Kernel-Starts verwenden, die Zeit, die Sie für den Treiber ausgeben, und es kann aufgrund von Kontextwechsel aus Betriebssystemperspektiven abweichen. 2- GPU-Timer hängen von GPU-Hardware-Zählern ab. Wenn Sie die Ereignisse zum Lesen der Zähler verwenden, erhalten Sie die genauesten Zeitpunkte, die Sie erhalten können. Da sich die CPU oder das Betriebssystem nicht mit GPU-Hardware-Zählern befassen, wird der Effekt keine sein. Der einzige Fall, der sich auswirken kann, ist der Treiber bei der Handhabung von Hardware-Zählern.

Der Aufwärmteil ist für Datenübertragungen und Speicherzuweisung gedacht, so dass er sich nicht auf das Verhalten von Hardware-Zählern auswirkt.

Verwandte Themen