Browse thread
Re: [Caml-list] I'm sure it's been discussed a few times, but here we go.... single-precision floats
- Jonathan Harrop
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Jonathan Harrop <jdh30@j...> |
| Subject: | Re: [Caml-list] I'm sure it's been discussed a few times, but here we go.... single-precision floats |
On Mon Mar 6 12:23 , Asfand Yar Qazi <email@asfandyar.cjb.net> sent:
>All the OCaml discussions about floating point precision I have seen so far
>evolve around how fast operations are performed on them - but the critical
>thing for things like collision detection, etc. in games is the amount of data
>that can fit into the CPU cache and be operated on before the cache must be
>reloaded. Obviously, twice as many single precision floats can fit into any
>CPU's cache than double precision floats.
Yes.
>We're talking huge dynamic data structures with millions of floating point
>coordinates that all have to be iterated over many times a second - preferably
>by using multithreaded algorithms, so that multiple CPUs can be used
>efficiently. Since doing this sort of work (i.e. parallel computing) in C++
>is a pain in the **** ('scuse my French :-), I want to learn a language that
>will make it easy and less error-prone - hence my study of OCaml.
Due to OCaml's lack of a concurrent GC, there is no good way to low-level parallelise OCaml programs.
You can, of course, use message passing between separate OCaml processes to parallelise at a higher
level.
OCaml's advantages center around the ability to design and use sophisticated data structures easily -
the precise opposite of iterating over long arrays.
>So, is there any way (I'm thinking similar to 'nativeint') to use floats in
>OCaml to maximize the data that can be stored and operated on in the CPUs
>cache such that system memory is accessed as little as possible?
Currently, your only choice is to use big arrays of 32-bit floats. There is no other way to store a
single 32-bit float in an OCaml data structure. Such functionality would be useful in the case of my
ray tracer, for example:
http://www.ffconsultancy.com/free/ray_tracer
where efficient use of a big array would require fundamental alterations. However, my AMD64 wastes a
lot of memory on pointers as well...
Cheers,
Jon.