Я очень новичок во всем мире OpenCL, поэтому я следую некоторым учебникам для начинающих. Я пытаюсь объединить , и , , чтобы сравнить время, необходимое для добавления двух массивов вместе на разных устройствах. Однако я получаю непонятные результаты. Учитывая, что код слишком длинный, я сделал этот GitHub Gist .
На моем Mac у меня есть 1 платформа с 3 устройствами. Когда я назначаю j
в
cl_command_queue command_queue = clCreateCommandQueue(context, device_id[j], 0, &ret);
вручную до 0, кажется, запустить расчет на ЦП (около 5,75 секунд). при установке 1 и 2 время расчета резко падает (0,01076 секунд). Я полагаю, это потому, что вычисления выполняются на моем Intel или AMD GPU. Но тогда есть некоторые проблемы:
- Я могу настроить
j
на любое большее число, и оно все еще работает на графических процессорах.
- Когда я помещаю все вычисления в цикл, время, измеренное для всех устройств, совпадает с временем вычислений на CPU (как я полагаю).
- Время, необходимое для расчета для всех
0<j
, подозрительно близко. Интересно, действительно ли они запускаются на разных устройствах?
Я явно не имею понятия об OpenCL, поэтому я был бы признателен, если бы вы взглянули на мой код и сообщили мне, в чем заключаются мои ошибки и как я могу их исправить. Или, может быть, укажите мне на хороший пример, который выполняет вычисления на разных устройствах и сравнивает время.
P.S. Я также разместил этот вопрос здесь, в Reddit