Сроки передачи и исполнения данных в JOCL
Я использую библиотеку JOCL (от JOGAMP), и мне было интересно, можно ли измерить время, необходимое для передачи данных с хоста на устройство, время, которое потребовалось ядром, и время, необходимое для получения результатов отдельно?
В настоящее время я использую свои ядра следующим образом:
queue.putReadBuffer (...). put1DKernel (...). putWriteBuffer (...)
1 ответ
Чтобы ответить на мой собственный вопрос;-) Процедура идет следующим образом... сначала создайте CLEventList с требуемой емкостью, так как я хочу только измерить выполнение ядра, я установил это в 1.
CLEventList list = new CLEventList(1);
Теперь, когда вы устанавливаете ядро в очередь команд, вы добавляете список в качестве аргумента:
queue.putReadBuffer(...).put1DKernel(..., list).putWriteBuffer(...).finish();
После этого вы можете узнать время по телефону:
long start = list.getEvent(0).getProfilingInfo(ProfilingCommand.START);
long end = list.getEvent(0).getProfilingInfo(ProfilingCommand.END);
long duration = end - start // time in nanoseconds
Не забудьте инициализировать свою очередь команд с включенным Mode.PROFILING_MODE.