2015-06-25 1 views
9

В последнем семестре нам нужно было разработать трассу для обучения в школе. В школе, я пытался немного поиграть с ней.Java raytracing float vs double

Я хотел посмотреть, что изменилось бы, если бы я изменил все вычисления с плавающей запятой из double в float (все вычисления выполнялись с удвоениями). Поэтому я изменил каждую переменную на тип float и просто отбросил каждый двойник, возвращаемый из математических методов, чтобы плавать. Тестирование моего raytracer на нескольких сценах показало довольно приличное увеличение производительности.

Поиск по сети Я нашел различные причины, по которым float может быть быстрее, но также говорят, что двойной может быть таким же быстрым или даже более быстрым в 64-битной среде. Дело в том, что я работаю в 64-битной среде и JVM. Какова была бы причина повышения производительности?

Теперь я читаю книгу PBRT и планирую переписать raytracer с нуля после этого. Будет ли выбор поплавка для всех вычислений с плавающей запятой создавать какие-либо проблемы? Я не заметил ни одного во время моих тестов, но, возможно, для определенных сцен была бы более низкая точность (тестирование пересечений похоже на то, где это может создать возможную проблему)? Или, может быть, компромисс, например, использование двойных для критических тестов и поплавок для менее критических вычислений? Мне пришлось бы использовать другую математическую библиотеку, чтобы избавиться от кастинга, я бы пошел по плавающей дороге.

+0

Я считаю, что 'double d = 1d' - две инструкции, а' float f = 1f' - один. Даже на 64-битных машинах. Беспорядок с 64-битной JVM. – jn1kk

+0

«Я работаю в 64-разрядной среде». 64-разрядная ОС не считается 64-разрядной средой. Ваш компилятор и другие инструменты (такие как JVM, если вы делаете Java) также должны быть 64-битными. –

+1

Возможный дубликат [Плавает медленнее, чем двойной? 64-разрядная программа работает быстрее, чем 32-битная программа?] (Http://stackoverflow.com/questions/5738448/is-float-slower-than-double-does-64-bit-program-run-faster-than-32 -битная программа) –

ответ

6

Там не очень много никакой разницы между поплавком и дважды, когда речь идет о скорости расчета, насколько настольных процессоров является платформой. Разница может быть достигнута только из-за повышенных требований к пропускной способности памяти, потому что удваивание требует в два раза больше места.

Его отличия в расчетах на основе графического процессора, которые больше подходят для поплавка и, например, Графические процессоры Nvidia значительно сокращаются в два раза.

Я бы пошел с смешанным подходом; хранить данные, такие как полигоны с плавающей точностью, но выполнять все вычисления в двойном порядке. Малый объем памяти, высокая точность - беспроигрышная.

+0

Спасибо за ваш ответ! Это похоже на хороший компромисс, я попробую. – Koekje