caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Threaded ocaml code, native threads, and linux SMP
@ 2004-12-17  2:10 Julian
  2004-12-17  2:50 ` [Caml-list] " Kip Macy
  0 siblings, 1 reply; 2+ messages in thread
From: Julian @ 2004-12-17  2:10 UTC (permalink / raw)
  To: caml-list

I wrote the following CPU-bound function in order to test the
Thread module in ocaml:

    let rec loop pair = match pair with
              (100000, 50000) -> ()
            | (     i, 50000) -> loop (i+1, 0)
            | (     i,     j) -> loop (i, j+1) ;;

This function was used in two test programs:

* Version 1 *

    let t1, t2 = Thread.create loop (0,0),
                 Thread.create loop (0,0) ;;

    Thread.join t1;;
    Thread.join t2;;


* Version 2 *

    loop (0,0);
    loop (0,0);;


The test programs were each compiled with the following command:
(ocaml 3.08, debian sid, linux kernel 2.6):

    ocamlopt -thread -o <name> unix.cmxa threads.cmxa <name>.ml


I then tried running the two versions on an SMP machine. I found that
whereas I expected version 1 to run roughly twice as fast, they actually
took the same amount of time.

Closer inspection using "ps" revealed that only one processor was being
used. When I wrote a similar test program in C, calling the pthread
functions directly, the threads were run on separate CPUs as expected.

The "ldd" command reveals that the C version and the ocaml version were
relying on the same native pthread library.

So why doesn't the ocaml version use 2 processors?
Is it a flaw with my program?
Did I compile the program incorrectly?


Thanks for any help you can give,
Julian


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-12-17  2:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-12-17  2:10 Threaded ocaml code, native threads, and linux SMP Julian
2004-12-17  2:50 ` [Caml-list] " Kip Macy

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).