let n =try int_of_string Sys.argv.(1)with_->1letrec fib n =if n <2then1elsebeginlet d1 =Domain.spawn (fun_-> fib (n - 1))inlet d2 =Domain.spawn (fun_-> fib (n - 2))inDomain.join d1 + Domain.join d2
endlet main ()=let r = fib n inPrintf.printf "fib(%d) = %d\n%!" n r
let_= main ()
let num_domains = int_of_string Sys.argv.(1)let n = int_of_string Sys.argv.(2)letrec fib n =if n <2then1else fib (n - 1) + fib (n - 2)module Task=Domainslib.Taskletrec fib_par pool n =if n >20thenbeginlet a =Task.async pool (fun_-> fib_par pool (n-1))inlet b =Task.async pool (fun_-> fib_par pool (n-2))inTask.await pool a + Task.await pool b
endelse fib n
let main ()=let pool =Task.setup_pool ~num_domains:(num_domains - 1)()inlet res =Task.run pool (fun_-> fib_par pool n)inTask.teardown_pool pool;Printf.printf "fib(%d) = %d\n" n res
let_= main ()