* [Caml-list] Looking for a real array
@ 2003-04-27 21:34 Eray Ozkural
2003-04-28 16:40 ` Brian Hurt
0 siblings, 1 reply; 12+ messages in thread
From: Eray Ozkural @ 2003-04-27 21:34 UTC (permalink / raw)
To: OCaml List
I knew this all along but looks like I neglected that an array is in fact an
array of pointers rather than an array of contiguous storage blocks in
memory. Is there a way to get real FORTRAN/C arrays for people who might not
want this extra level of indirection?
val make : int -> 'a -> 'a array
Array.make n x returns a fresh array of length n, initialized with x. All the
elements of this new array are initially physically equal to x (in the sense
of the == predicate). Consequently, if x is mutable, it is shared among all
elements of the array, and modifying x through one of the array entries will
modify all other entries at the same time.
Regards,
--
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara KDE Project: http://www.kde.org
www: http://www.cs.bilkent.edu.tr/~erayo Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F 7C07 AE16 874D 539C
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-27 21:34 [Caml-list] Looking for a real array Eray Ozkural
@ 2003-04-28 16:40 ` Brian Hurt
2003-04-28 18:29 ` Eray Ozkural
0 siblings, 1 reply; 12+ messages in thread
From: Brian Hurt @ 2003-04-28 16:40 UTC (permalink / raw)
To: erayo; +Cc: OCaml List
On Mon, 28 Apr 2003, Eray Ozkural wrote:
> I knew this all along but looks like I neglected that an array is in fact an
> array of pointers rather than an array of contiguous storage blocks in
> memory. Is there a way to get real FORTRAN/C arrays for people who might not
> want this extra level of indirection?
>
> val make : int -> 'a -> 'a array
> Array.make n x returns a fresh array of length n, initialized with x. All the
> elements of this new array are initially physically equal to x (in the sense
> of the == predicate). Consequently, if x is mutable, it is shared among all
> elements of the array, and modifying x through one of the array entries will
> modify all other entries at the same time.
If this is a problem, you might want to use Array.init instead. Instead
of doing (for instance):
let r = ref 0.0 in Array.make n r
which returns an array of float references, initially all r, so changing
one changes all of them, instead do:
Array.init n (fun _ -> ref 0.0)
which creates a new reference for every element.
Having a reference in addition to the data structure is a little bit of
overhead. But optimization is a tricky thing- often times, what you gain
in the straights you lose in the curves. For example, what happens when
some other peice of code keeps a pointer to a single element of the array,
when the pointer to the rest of the array- and all the other elements- are
gone? In ocaml, the array and all the other elements become garbage, and
the last, lone object that is not garbage stays around. Also, copying
becomes a big issue in my experience.
Personally, I find one extra level of dereferencing isn't that big of a
deal. If you're too the point where it is a big deal, you are already
talking about hand-tuned assembly language. My advice: stop worrying
about minutia. Permature optimization is the root of all evil.
Brian
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 16:40 ` Brian Hurt
@ 2003-04-28 18:29 ` Eray Ozkural
2003-04-28 18:43 ` Brian Hurt
2003-04-29 10:52 ` Markus Mottl
0 siblings, 2 replies; 12+ messages in thread
From: Eray Ozkural @ 2003-04-28 18:29 UTC (permalink / raw)
To: Brian Hurt; +Cc: OCaml List
Hi Brian,
On Monday 28 April 2003 19:40, Brian Hurt wrote:
> Having a reference in addition to the data structure is a little bit of
> overhead. But optimization is a tricky thing- often times, what you gain
> in the straights you lose in the curves. For example, what happens when
> some other peice of code keeps a pointer to a single element of the array,
> when the pointer to the rest of the array- and all the other elements- are
> gone? In ocaml, the array and all the other elements become garbage, and
> the last, lone object that is not garbage stays around. Also, copying
> becomes a big issue in my experience.
>
I will happily agree that asymptotic complexity is more important than
constant gains and that there are other book-keeping tasks that might make
the programming more complex than necessary.
> Personally, I find one extra level of dereferencing isn't that big of a
> deal. If you're too the point where it is a big deal, you are already
> talking about hand-tuned assembly language. My advice: stop worrying
> about minutia. Permature optimization is the root of all evil.
Yes, I'm coming from the land of evil optimizers. :) I spent a large portion
of my youth hand-optimizing 68k assembly! I was really shocked when I found
out about 2 years ago that some FORTRAN compilers could do the tricks I spent
hours on the Amiga to perform!
To be serious, I was concerned about this fact because I have, if you recall,
started writing a graph library. Unfortunately, it makes a big deal of space
and time difference when I use pointers to integers rather than simply
integers! In fact, my advisor would shoot me if I did the former. Space loss
is evident. But the worse case comes from losing "cache coherence", a fine
point that can change the speed 5 fold sometimes!!!!! Memory hierarchy is
like magic!
Thanks to Brian Hurt and David Gurr who wrote off-the list that bigarrays
would work for me. It looks like Bigarrays can do unboxed arrays of integers.
Cheers,
--
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara KDE Project: http://www.kde.org
www: http://www.cs.bilkent.edu.tr/~erayo Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F 7C07 AE16 874D 539C
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 18:29 ` Eray Ozkural
@ 2003-04-28 18:43 ` Brian Hurt
2003-04-28 18:51 ` Eray Ozkural
2003-04-29 10:52 ` Markus Mottl
1 sibling, 1 reply; 12+ messages in thread
From: Brian Hurt @ 2003-04-28 18:43 UTC (permalink / raw)
To: erayo; +Cc: Brian Hurt, OCaml List
On Mon, 28 Apr 2003, Eray Ozkural wrote:
>
> Yes, I'm coming from the land of evil optimizers. :) I spent a large portion
> of my youth hand-optimizing 68k assembly! I was really shocked when I found
> out about 2 years ago that some FORTRAN compilers could do the tricks I spent
> hours on the Amiga to perform!
Wow. I was stuck on the x86. I've never quite gotten over Amiga envy.
Not that I haven't spent some time hand-optimizing x86 code, now and
again. :-)
>
> To be serious, I was concerned about this fact because I have, if you recall,
> started writing a graph library. Unfortunately, it makes a big deal of space
> and time difference when I use pointers to integers rather than simply
> integers! In fact, my advisor would shoot me if I did the former. Space loss
> is evident. But the worse case comes from losing "cache coherence", a fine
> point that can change the speed 5 fold sometimes!!!!! Memory hierarchy is
> like magic!
I may be confused, but I thought integers were unboxed in arrays (not
BigArrays, just arrays). Unless you mean references to integers?
> Thanks to Brian Hurt and David Gurr who wrote off-the list that
> bigarrays would work for me. It looks like Bigarrays can do unboxed
> arrays of integers.
Different Brian, I think.
Brian
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 18:43 ` Brian Hurt
@ 2003-04-28 18:51 ` Eray Ozkural
2003-04-28 19:05 ` Brian Hurt
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Eray Ozkural @ 2003-04-28 18:51 UTC (permalink / raw)
To: Brian Hurt; +Cc: OCaml List
On Monday 28 April 2003 21:43, Brian Hurt wrote:
> I may be confused, but I thought integers were unboxed in arrays (not
> BigArrays, just arrays). Unless you mean references to integers?
>
Okay, I might be a little confused, forgive me. I thought, implementation
wise, when I say
let a = [| 6, 3, 5, 7, 8 |]
it's implemented by ocaml as
int** a;
in C speak.
Right or wrong? (Fearing that I might be demoted to beginner status now :P )
>
> Different Brian, I think.
>
Ah, no, you did reply all off-list ;)
Cheers,
--
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara KDE Project: http://www.kde.org
www: http://www.cs.bilkent.edu.tr/~erayo Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F 7C07 AE16 874D 539C
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 18:51 ` Eray Ozkural
@ 2003-04-28 19:05 ` Brian Hurt
2003-04-28 19:05 ` Eray Ozkural
2003-04-28 19:07 ` Falk Hueffner
2003-04-28 19:21 ` Karl Zilles
2 siblings, 1 reply; 12+ messages in thread
From: Brian Hurt @ 2003-04-28 19:05 UTC (permalink / raw)
To: erayo; +Cc: OCaml List
On Mon, 28 Apr 2003, Eray Ozkural wrote:
> On Monday 28 April 2003 21:43, Brian Hurt wrote:
> > I may be confused, but I thought integers were unboxed in arrays (not
> > BigArrays, just arrays). Unless you mean references to integers?
> >
>
> Okay, I might be a little confused, forgive me. I thought, implementation
> wise, when I say
> let a = [| 6, 3, 5, 7, 8 |]
Start with, I think you meant [| 6; 3; 5; 7; 8 |]. Notice the semicolons.
I say this only because I've been caught on this several times before :-}.
> it's implemented by ocaml as
> int** a;
> in C speak.
I thought ints were always unboxed. They fit into a word. That's why
they're 31 bits, not 32 bits- the low bit is a tag so the GC can
differentiate pointers from ints.
Hopefully someone who can speak authoritiatively will speak up.
Brian
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 19:05 ` Brian Hurt
@ 2003-04-28 19:05 ` Eray Ozkural
0 siblings, 0 replies; 12+ messages in thread
From: Eray Ozkural @ 2003-04-28 19:05 UTC (permalink / raw)
To: Brian Hurt; +Cc: OCaml List
On Monday 28 April 2003 22:05, Brian Hurt wrote:
> > Okay, I might be a little confused, forgive me. I thought, implementation
> > wise, when I say
> > let a = [| 6, 3, 5, 7, 8 |]
>
> Start with, I think you meant [| 6; 3; 5; 7; 8 |]. Notice the semicolons.
> I say this only because I've been caught on this several times before :-}.
hush. it will become evident that I used haskell too much :P
--
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara KDE Project: http://www.kde.org
www: http://www.cs.bilkent.edu.tr/~erayo Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F 7C07 AE16 874D 539C
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 18:51 ` Eray Ozkural
2003-04-28 19:05 ` Brian Hurt
@ 2003-04-28 19:07 ` Falk Hueffner
2003-04-28 19:21 ` Karl Zilles
2 siblings, 0 replies; 12+ messages in thread
From: Falk Hueffner @ 2003-04-28 19:07 UTC (permalink / raw)
To: OCaml List
Eray Ozkural <exa@kablonet.com.tr> writes:
> Okay, I might be a little confused, forgive me. I thought, implementation
> wise, when I say
> let a = [| 6, 3, 5, 7, 8 |]
> it's implemented by ocaml as
> int** a;
> in C speak.
>
> Right or wrong? (Fearing that I might be demoted to beginner status
> now :P )
Wrong. foo array corresponds to foo*, and ints are not boxed, so int
array is like int*.
--
Falk
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 18:51 ` Eray Ozkural
2003-04-28 19:05 ` Brian Hurt
2003-04-28 19:07 ` Falk Hueffner
@ 2003-04-28 19:21 ` Karl Zilles
2 siblings, 0 replies; 12+ messages in thread
From: Karl Zilles @ 2003-04-28 19:21 UTC (permalink / raw)
Cc: OCaml List
Eray Ozkural wrote:
> On Monday 28 April 2003 21:43, Brian Hurt wrote:
>
>> I may be confused, but I thought integers were unboxed in arrays (not
>> BigArrays, just arrays). Unless you mean references to integers?
>>
>
>
> Okay, I might be a little confused, forgive me. I thought,
implementation wise, when I say
> let a = [| 6, 3, 5, 7, 8 |]
> it's implemented by ocaml as
> int** a;
> in C speak.
>
> Right or wrong? (Fearing that I might be demoted to beginner status
now :P )
>
In the "Interfacing with C" section of the manual:
---
18.3.3 Arrays
Arrays of integers and pointers are represented like tuples, that is, as
pointers to blocks tagged 0. They are accessed with the Field macro for
reading and the modify function for writing.
Arrays of floating-point numbers (type float array) have a special,
unboxed, more efficient representation. These arrays are represented by
pointers to blocks with tag Double_array_tag. They should be accessed
with the Double_field and Store_double_field macros.
---
So it looks like the standard ocaml 31 bit integers arrays are unboxed,
as are floats arrays.
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-28 18:29 ` Eray Ozkural
2003-04-28 18:43 ` Brian Hurt
@ 2003-04-29 10:52 ` Markus Mottl
2003-04-29 14:10 ` Hal Daume III
1 sibling, 1 reply; 12+ messages in thread
From: Markus Mottl @ 2003-04-29 10:52 UTC (permalink / raw)
To: erayo; +Cc: Brian Hurt, OCaml List
On Mon, 28 Apr 2003, Eray Ozkural wrote:
> Thanks to Brian Hurt and David Gurr who wrote off-the list that bigarrays
> would work for me. It looks like Bigarrays can do unboxed arrays of integers.
Normal arrays always use unboxed (tagged) integers so there is no need
to use the Bigarray module unless you need very large arrays. Normal
float arrays, too, are unboxed, but only when the compiler can infer at
compile time that they are guaranteed to be float arrays.
Regards,
Markus Mottl
--
Markus Mottl http://www.oefai.at/~markus markus@oefai.at
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-29 10:52 ` Markus Mottl
@ 2003-04-29 14:10 ` Hal Daume III
2003-04-29 15:46 ` Markus Mottl
0 siblings, 1 reply; 12+ messages in thread
From: Hal Daume III @ 2003-04-29 14:10 UTC (permalink / raw)
To: Markus Mottl; +Cc: OCaml List
> to use the Bigarray module unless you need very large arrays. Normal
> float arrays, too, are unboxed, but only when the compiler can infer at
> compile time that they are guaranteed to be float arrays.
Does this also apply if I have an abstract type defined in another module:
> type foo = float
and then have a foo array?
- Hal
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Caml-list] Looking for a real array
2003-04-29 14:10 ` Hal Daume III
@ 2003-04-29 15:46 ` Markus Mottl
0 siblings, 0 replies; 12+ messages in thread
From: Markus Mottl @ 2003-04-29 15:46 UTC (permalink / raw)
To: Hal Daume III; +Cc: OCaml List
On Tue, 29 Apr 2003, Hal Daume III wrote:
> > to use the Bigarray module unless you need very large arrays. Normal
> > float arrays, too, are unboxed, but only when the compiler can infer at
> > compile time that they are guaranteed to be float arrays.
>
> Does this also apply if I have an abstract type defined in another module:
>
> > type foo = float
>
> and then have a foo array?
No, because the compiler cannot see then that it is a float when the
type is abstract. Internally (in the module implementation) however,
the compiler may well use unboxed foo arrays.
Regards,
Markus Mottl
--
Markus Mottl http://www.oefai.at/~markus markus@oefai.at
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2003-04-29 15:46 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-27 21:34 [Caml-list] Looking for a real array Eray Ozkural
2003-04-28 16:40 ` Brian Hurt
2003-04-28 18:29 ` Eray Ozkural
2003-04-28 18:43 ` Brian Hurt
2003-04-28 18:51 ` Eray Ozkural
2003-04-28 19:05 ` Brian Hurt
2003-04-28 19:05 ` Eray Ozkural
2003-04-28 19:07 ` Falk Hueffner
2003-04-28 19:21 ` Karl Zilles
2003-04-29 10:52 ` Markus Mottl
2003-04-29 14:10 ` Hal Daume III
2003-04-29 15:46 ` Markus Mottl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox