2015-06-25 21 views
9

Học kỳ trước, chúng tôi phải phát triển một raytracer cho một khóa học ở trường. Trường học được thực hiện, tôi đã cố gắng để fiddle một chút với nó.Java raytracing float vs đôi

Tôi muốn xem điều gì sẽ thay đổi nếu tôi thay đổi tất cả các phép tính điểm động từ kép sang phao (tất cả các tính toán được thực hiện với tăng gấp đôi). Vì vậy, tôi đã thay đổi mọi biến để gõ float, và chỉ cần cast mỗi double được trả về từ các phương thức Math để float. Kiểm tra raytracer của tôi trên một vài cảnh cho thấy một sự gia tăng hiệu suất khá tốt.

Tìm kiếm trên web Tôi tìm thấy nhiều lý do khiến float có thể nhanh hơn, nhưng cũng có một số người cho rằng tốc độ tăng gấp đôi có thể nhanh hoặc thậm chí nhanh hơn trong môi trường 64 bit. Vấn đề là, tôi đang chạy trong một môi trường 64-bit và JVM. Điều gì sẽ là lý do cho hiệu suất tăng lên này?

Bây giờ, tôi đang đọc cuốn sách PBRT và lập kế hoạch để viết lại một raytracer từ đầu sau này. Sẽ chọn nổi cho tất cả các tính toán điểm nổi đặt ra bất kỳ vấn đề? Tôi đã không nhận thấy bất kỳ trong các thử nghiệm của tôi, nhưng có lẽ cho những cảnh nhất định độ chính xác thấp hơn có thể (kiểm tra giao lộ có vẻ như nơi nó có thể đặt ra một vấn đề có thể)? Hoặc có lẽ một sự cân bằng, như sử dụng gấp đôi cho các xét nghiệm quan trọng và nổi cho các tính toán ít quan trọng? Tôi sẽ phải sử dụng một thư viện Math khác để loại bỏ việc đúc, tôi sẽ đi theo con đường nổi.

+0

Tôi tin rằng 'double d = 1d' là hai hướng dẫn, trong khi' float f = 1f' là một. Ngay cả trên các máy 64 bit. Lộn xộn xung quanh với một JVM 64bit. – jn1kk

+0

"Tôi đang chạy trong môi trường 64 bit" Hệ điều hành 64 bit không được tính là môi trường 64 bit. Trình biên dịch của bạn và các công cụ khác (chẳng hạn như một JVM nếu bạn đang làm Java) cũng phải là 64-bit. –

+1

bản sao có thể có của [Là phao chậm hơn gấp đôi? Chương trình 64 bit có chạy nhanh hơn chương trình 32 bit không?] (Http://stackoverflow.com/questions/5738448/is-float-slower-than-double-does-64-bit-program-run-faster-than-32 -bit-program) –

Trả lời

6

Có khá nhiều sự khác biệt giữa float và double khi nói đến tốc độ tính toán , theo như bộ xử lý máy tính để bàn là nền tảng. Sự khác biệt chỉ có thể đến từ các yêu cầu băng thông bộ nhớ tăng lên vì yêu cầu tăng gấp đôi gấp đôi không gian.

Các tính toán dựa trên GPU khác nhau của nó, những tính năng này được thiết kế phù hợp hơn cho phao và ví dụ: GPU của Nvidia giảm đáng kể gấp đôi.

Tôi muốn tiếp cận với cách tiếp cận hỗn hợp; lưu trữ dữ liệu giống như đa giác với độ chính xác nổi, nhưng thực hiện tất cả các phép tính trong gấp đôi. Dung lượng bộ nhớ nhỏ, độ chính xác cao - thắng-thắng.

+0

Cảm ơn câu trả lời của bạn! Nó có vẻ như một sự cân bằng tốt, một cái gì đó tôi sẽ cố gắng. – Koekje

Các vấn đề liên quan