Сроки передачи и исполнения данных в 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.

Другие вопросы по тегам