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

* Re: [Caml-list] Threaded ocaml code, native threads, and linux SMP
  2004-12-17  2:10 Threaded ocaml code, native threads, and linux SMP Julian
@ 2004-12-17  2:50 ` Kip Macy
  0 siblings, 0 replies; 2+ messages in thread
From: Kip Macy @ 2004-12-17  2:50 UTC (permalink / raw)
  To: Julian; +Cc: caml-list

MT garbage collection is both complex and fairly high in overhead. Ocaml
only supports user level threads. If you want to use both processors you
need to use multiple processes.

		-Kip



On Fri, 17 Dec 2004, Julian wrote:

> 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
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>


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