Vorausgesetzt, dass OpenCL eine API für heterogene Programmierung sein soll, hat es fast definitionsbedingt eine große Latenzzeit. Daher muss es eine asynchrone API dafür geben.Asynchronous API
Ich finde es jedoch schwierig, die asynchrone API in OpenCL.net zu finden. Ich habe die OpenCl.Net.Event
-Struktur gefunden, die bei den meisten API-Aufrufen ein out
-Parameter zu sein scheint. Allerdings kann ich sowieso keinen Callback auf das Ereignis zuordnen, da es anscheinend clSetEventCallback
von opencl.net
fehlt.
Kann jemand await
einen asynchronen Betrieb in opencl.net
?
EDIT: Ich hasse es, wenn Menschen downvote ohne zumindest einen Kommentar abzugeben. Zur Erinnerung, ich HABE ziemlich viel um das Thema gegoogelt, lese gerade ein Buch über OpenCL, habe sogar den Quellcode ins OpenCL.net-Projekt heruntergeladen, aber vergeblich. Es gibt sehr wenig Dokumentation auf OpenCL.net.
Was meinen Sie mit Latenz? Geht es um die Zeit, in der die Funktion Blockade aufruft, während sie auf Ergebnisse wartet? – Eric
Zum Beispiel in OpenCL müssen Sie Ihre Daten in den Speicher des Zielgeräts laden. Dies geschieht durch Einreihen einer Ladespeicheroperation. Der Beispielcode zeigt, wie dies synchron geschieht (indem async auf false gesetzt wird und das "out" -Ereignisobjekt ignoriert wird). Aus der Sicht der Implementierung ist das Laden von Daten auf die GPU "langsam", da die Latenz hoch ist (selbst wenn wir nur GDDR5-Latenzzeiten berücksichtigen). Wenn wir Hunderte von Hin- und Rückfahrten über den PCI-E-Bus zur GPU haben, verlieren wir alle Leistungssteigerungen. Daher möchte ich in der Lage sein, Operationen in die Warteschlange zu stellen und über die Fertigstellung benachrichtigt zu werden. – Aron
Ich bin mit openCl nicht vertraut, aber nicht die Batch-Verarbeitung von openCl, über die wir reden? Was Sie wollen, ist so viel Zeit wie möglich in die Warteschlange Daten und so wenig Zeit wie möglich warten auf Ergebnisse (oder etwas anderes) richtig? – Eric