OpenCL Точность с плавающей запятой

Я обнаружил проблему со стандартом числа с плавающей запятой между хостом и клиентом в OpenCL. Проблема заключалась в том, что числа с плавающей запятой, вычисленные Opencl, не находятся в тех же пределах с плавающей запятой, что и мой компилятор Visual Studio 2010 при компиляции в x86. Однако при компиляции в x64 они находятся в том же пределе. Я знаю, что это должно быть что-то с http://www.viva64.com/en/b/0074/

Источник, который я использовал во время тестирования: http://www.codeproject. com/Articles/110685/Part-1-OpenCL-Portable-Parallelism Когда я запускал программу в x86, она давала мне 202 числа, которые были равны, тогда как ядро ​​и программа на C++ брали в квадрате 1269760 чисел. Однако в 64-битной сборке 1269760 чисел были правильными, то есть 100%.Кроме того, я обнаружил, что ошибка между вычисленным результатом opencl и x86 c++ составила 5,5385384e-014, что является очень маленькой долей, но недостаточно малой по сравнению с эпсилоном числа, которое было 2,92212543378266922312416e-19.
Это потому, что ошибка должна быть меньше эпсилон, чтобы программа могла распознать два числа как одно равное число. Конечно, обычно никто никогда не сравнивает числа с плавающей запятой изначально, но хорошо знать, что пределы числа с плавающей запятой разные. И да, я пытался установить flt:static, но получил ту же ошибку.

Так что я хочу какое-то объяснение этому поведению. Заранее спасибо за все ответы.

5
задан OznOg 23 October 2017 в 18:43
поделиться