2012-03-01 6 views
-1

Я знаю, что количество рабочих элементов влияет на время выполнения, но следует ли ожидать, что у меня будут несколько разные результаты, используя разные количества рабочих элементов при многократном запуске ядра? СпасибоВлияние рабочих элементов на вычисления

+0

Не могли бы вы немного описать, что означает «немного другое» в этом контексте. Вы говорите о значениях с плавающей запятой? Не могли бы вы указать некоторые относительные и абсолютные ошибки, которые вы видите? – talonmies

+0

Что у кого сейчас, где сейчас? Пожалуйста, уточните, что вы просите здесь. – cha0site

+0

Я написал код как для CPU, так и для GPU. который итерации по элементам в векторе, а затем находит норму. Но с таким же количеством итераций я получаю несколько иные нормы. Это потому, что я использую float в OpenCL, а не CL_float? – Damoon

ответ

0

Если у вас есть другие результаты, значит, у вас есть ошибка в коде. Если вы просто сделаете norm+=element*element; для глобальной переменной norm, то произойдет то, что некоторые потоки выполняют это одновременно, а часть вашей нормы теряется.

Чтобы сделать вещи простыми, это даже происходит, когда два рабочих элемента увеличивают один и тот же счетчик, a++. Оба будут читать текущее значение a, оба увеличат его до a+1 и оба напишут a+1 обратно в реестр. Таким образом, вы получаете a+1 вместо a+2. То, что происходит, похоже на ваш вектор.

+0

Спасибо, но я нашел проблему. Мой метод чувствителен к порядку рабочих элементов. – Damoon

Смежные вопросы