Fermi CUDA двойной точности против C - PullRequest
0 голосов
/ 30 декабря 2010

есть небольшая ошибка между результатами CPU и GPU с двойной точностью при использовании Fermi GPU.

например, для небольшого набора тестов я получаю следующую абсолютную ошибку для: (Число 1 (ЦП) - Число 2 (ГП)) = 3E-018.

в двоичном виде этокак и ожидалось, очень маленький…

НОМЕР 1 в двоичном виде:

xxxxxxxxxxxxx111000000010 01

против

НОМЕР 2в двоичном виде:

xxxxxxxxxxxx1111000000010 10

Хотя это разница в одну двоичную цифру, я стараюсь устранить любые различия, так как ошибки накапливаются во время моего кода.

какие-нибудь советы от тех, кто знаком с ферми?если это неизбежно, могу ли я заставить C / C ++ имитировать поведение округления ферми?

1 Ответ

1 голос
/ 23 января 2011

Вы должны взглянуть на это сообщение .

Плавающая точка не ассоциативна, поэтому, если компилятор решит выполнять операции в другом порядке, вы получите другой результат. Две версии одного и того же компилятора могут создавать различия! Разные компиляторы с большей вероятностью будут создавать различия, и если вы выполняете параллельную работу на графическом процессоре (верно?), То вы, по сути, выполняете операции в другом порядке ...

Аппаратное обеспечение Fermi соответствует стандарту IEEE754-2008, что означает, что в дополнение к стандартному округлению IEEE754 оно также имеет команду слияния с умножением-сложением (FMA), которая позволяет избежать потери точности между умножением и сложением.

...