Я видел здесь несколько вопросов о переполнении стека, занимающихся одними и теми же проблемами, но без определенного ответа. Я думал, что снова спрошу, с кучей моих собственных вопросов. Все связаны с предметом.Когда происходит передача данных OpenCL?
Итак, знаем ли мы, когда происходит передача данных с хоста на устройство openCL? Можете ли вы сказать мне точную операцию переноса памяти функций ниже (то есть, какие данные передаются или создаются, если таковые имеются, когда эти функции вызываются?):
clCreateBuffer()
clSetKernelArg()
clEnqueueNDRangeKernel()
Первые два даже не создают события, поэтому мы не можем их разучить, но, безусловно, здесь происходит передача данных.
Есть ли способ передачи данных на устройство без предварительной установки его в качестве аргумента ядра?
Похоже, что у моего объекта mem, созданного с помощью CL_MEM_USE_HOST_PTR
, непосредственно манипулируется устройством. Почему это было бы нежелательно, поскольку, таким образом, мы могли бы избежать дальнейших команд передачи данных (и, безусловно, драйвер реализует это наиболее эффективным способом)?
Передача данных (скажем, в качестве аргумента ядра arg) остается на устройстве для дальнейших манипуляций после возвращения ядра? Если нет способа сделать это?