У меня есть две программы, написанные мной с нуля, одна из которых является интегральным и вторым матрично-матричным умножением. Когда я выполнял обе программы с картами GPU, и я установил глобальный размер 1024, я ожидал, что код ядра будет выполняться 1024 раза, и это было правильно, оно выполнялось столько же раз, сколько я установил для глобального размера, и менял локальный размер не имело значения для вывода результатов и вывода. Тот же код, который я пытался выполнить с процессором, и был потрясен, когда увидел, что функция ядра не выполняется столько же раз, сколько и в глобальном размере. Вот пример из интеграла: global size = 2048, local size = 1, Я ожидаю 2048 выполнение функции ядра, и да, это 2048, , но когда мы имеем глобальный размер = 2048 и локальный размер = 16, тогда он выполняет 256 раз ... Нормально ли это? Почему работа с процессором отличается в openCl, чем с GPU? Я думал, что для пользователей не важно, какое устройство мы используем, тот же код должен работать на разных устройствах одинаково. Я ошибаюсь?OpenCL те же алгоритмы для GPU и CPU, но OpenCl работает по-разному для этих двух устройств
Заранее благодарю за помощь!
Нам нужен [минимальный, совместимый, проверенный пример] (http://stackoverflow.com/help/mcve) проблемы. Поэтому, пожалуйста, напишите какой-то код и как вы его ставите (и с каким драйвером OpenCL и т. Д.). Вообще, драйвер должен гарантировать, что вся сетка выполнена, то есть локальный размер рабочего времени, когда выполняются потоки глобального рабочего размера. – einpoklum
Должен быть неправильный перехват идентификатора глобального потока и идентификатора группы и идентификатора локального потока. Как вы проверяете количество казней? –
@huseyintugrulbuyukisik Я просто добавляю + = 1 к глобальной переменной в код ядра, чтобы узнать, сколько раз выполнялось ядро. – Gzyniu