Browse thread
Comments welcomed to progr. style / speed of my first ocaml program "Error correcting LDPC decoder"
-
Andries Hekstra
- Gerd Stolpmann
- Jon 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: | Gerd Stolpmann <info@g...> |
| Subject: | Re: [Caml-list] Comments welcomed to progr. style / speed of my first ocaml program "Error correcting LDPC decoder" |
Andries Hekstra said: > Attached please find the first program I wrote. It has about the same > speed as its C++ counterpart (slightly faster). I welcome comments w.r.t. > programming style, esp. when it affects the speed of the program. As you are doing a lot of array manipulation, this tip may increase performance significantly: because "float array" is stored with a different layout than all other arrays, the compiler generates a dynamic check for every access when the type of the array elements cannot be statically determined. For example, your function let swapElement i j a = let x = a.(i) in a.(i) <- a.(j); a.(j) <- x is polymorphic in the element type. If you define instead let swapFloatElement i j (a : float array) = let x = a.(i) in a.(i) <- a.(j); a.(j) <- x better code is generated because the mentioned check can be omitted by the compiler. This applies only if the function is not inlined; swapElement could be small enough (but qsort, for instance, is definitely not). Unfortunately, one cannot define swapNonFloatElement because there is no way to constrain a type that it is not float. So the type system cannot represent this duality float/non-float, and one must fall back to as many definitions as element types are actually used. Gerd ------------------------------------------------------------ Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de ------------------------------------------------------------