Учитывая, что OpenCL является API-интерфейсом для гетерогенного программирования, он, по определению, обладает огромным штрафом за латентность, связанным с ним. Поэтому ДОЛЖЕН быть асинхронным API для него.Асинхронный API
Однако мне сложно найти асинхронный API в OpenCL.net. Я нашел структуру OpenCl.Net.Event
, которая, как представляется, является параметром out
в большинстве вызовов API. Однако я никак не могу найти ответ на событие, так как clSetEventCallback
отсутствует в opencl.net
.
Кто-нибудь знает как await
асинхронная операция в opencl.net
?
EDIT: Я ненавижу, когда люди с нисходящей нитью, по крайней мере, давая комментарий. Для записи я немного поработал над этой темой, сейчас я читаю книгу об OpenCL, даже загрузил исходный код в проект OpenCL.net безрезультатно. В OpenCL.net имеется небольшая документация.
Что вы подразумеваете под латентностью? Это время, когда функция вызывает блок во время ожидания результатов? – Eric
Например, в OpenCL вам нужно будет загрузить свои данные в память целевого устройства. Это делается путем установки операции загрузки памяти. Пример кода показывает, как это сделать синхронно (путем установки async false и игнорирования объекта 'out'' Event''). С точки зрения реализации загрузка данных на графический процессор является «медленной», когда эта задержка высока (даже если мы просто учитываем задержки GDDR5). Когда у нас есть сотни круглых поездок на GPU через шину PCI-E, мы теряем все выгоды от производительности. Таким образом, я хочу иметь возможность запускать операции и получать уведомление о завершении. – Aron
Я не очень хорошо знаком с openCl, но это не пакетная обработка openCl, о которой мы говорим? Вы хотите тратить как можно больше времени на очереди и как можно меньше времени на ожидание результатов (или чего-либо еще)? – Eric