From: Olivier Andrieu <andrieu@ijm.jussieu.fr>
To: Thomas.Fischbacher@Physik.Uni-Muenchen.DE
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] String Problem
Date: Wed, 09 Jun 2004 12:35:54 +0200 (CEST) [thread overview]
Message-ID: <20040609.123554.58117203.andrieu@ijm.jussieu.fr> (raw)
In-Reply-To: <Pine.LNX.4.58.0406091144100.9017@seekar.cip.physik.uni-muenchen.de>
Thomas Fischbacher [Wed, 9 Jun 2004]:
>
> Dear Caml hackers,
>
> I am just doing some quite large (string theory) calculation which
> basically runs through a huge tree and does some computation at
> every node in ocaml which I have to parallelize in an effective
> way. My present approach is to set an alarm for the process doing
> the calculation, then splitting into chunks and serializing all the
> work that corresponds to nodes that have been touched but for which
> the calculation has not yet been finished. The serialized strings
> are then compressed and sent out via the net to other machines to
> help with the calculation.
>
> I'd love to avoid temporary files, as these are not necessary, and
> my design is simpler and cleaner without having to worry about
> filesystem issues.
>
> Now I encounter the problem that ocaml can only serialize to
> strings, but these are limited to 16 MB in size. If my data set
> (which is structured in a complicated way, i.e. it would be quite
> some effort to write specialized readers and printers) gets large
> enough, this entire approach therefore breaks down.
It's quite easy to serialize to a Bigarray with a bit of C code
(warning, not tested):
,----
| #include "intext.h"
| #include "bigarray.h"
|
| CAMLprim value ml_marshal_to_bigarray(value v, value flags)
| {
| char *buf;
| long len;
| output_value_to_malloc(v, flags, &buf, &len);
| return alloc_bigarray(BIGARRAY_UINT8 | BIGARRAY_C_LAYOUT | BIGARRAY_MANAGED,
| 1, buf, &len);
| }
|
| CAMLprim value ml_demarshal_from_bigarray(value b)
| {
| struct caml_bigarray *b_arr = Bigarray_val(b);
| return input_value_from_block(b_arr->data, b_arr->dim[0]);
| }
`----
,----
| open Bigarray
|
| external marshal_to_bigarray :
| 'a -> Marshal.extern_flags list ->
| (char, int8_unsigned_elt, c_layout) Array1.t
| = "ml_marshal_to_bigarray"
|
| external demarshal_from_bigarray :
| (char, int8_unsigned_elt, c_layout) Array1.t -> 'a
| = "ml_demarshal_from_bigarray"
`----
Alternatively, buy a 64 bits computer :)
--
Olivier
-------------------
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
next prev parent reply other threads:[~2004-06-09 10:35 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-09 9:58 Thomas Fischbacher
2004-06-09 10:35 ` Olivier Andrieu [this message]
2004-06-09 11:05 ` Thomas Fischbacher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040609.123554.58117203.andrieu@ijm.jussieu.fr \
--to=andrieu@ijm.jussieu.fr \
--cc=Thomas.Fischbacher@Physik.Uni-Muenchen.DE \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).