2009-08-17 8 views
9

ओकैमल प्रक्रिया केवल एक कोर का उपयोग कर सकती है और एकाधिक कोर का उपयोग करने के लिए मुझे कई प्रक्रियाएं चलनी पड़ती हैं।मोंटे कार्लो सिमुलेशन करने के लिए ओकैम में मल्टीकोरों का उपयोग कैसे करें?

क्या मोंटे कार्लो सिमुलेशन समांतर करने के लिए उपयोग करने के लिए कोई ओकैम फ्रेमवर्क है?

उत्तर

3

वर्तमान में, ऐसा करने का एकमात्र तरीका एमपीआई के साथ है, और आप Xavier Leroy's website पर इसके लिए ओकंपल बाइंडिंग पा सकते हैं।

+2

ocaml4multicore उपलब्ध है (सीमाओं के साथ), देखें: http://www.algo-prog.info/ocmc/web/ – nlucaroni

8

एक और (काँटेदार) की प्रक्रिया में एक मूल्य के लिए एक समारोह लागू करने के लिए निम्नलिखित invoke Combinator का प्रयोग करें और फिर जब () मूल्य लागू किया जाता है उसके परिणाम के लिए इंतजार ब्लॉक:

let invoke (f : 'a -> 'b) x : unit -> 'b = 
    let input, output = Unix.pipe() in 
    match Unix.fork() with 
    | -1 -> (let v = f x in fun() -> v) 
    | 0 -> 
     Unix.close input; 
     let output = Unix.out_channel_of_descr output in 
     Marshal.to_channel output (try `Res(f x) with e -> `Exn e) []; 
     close_out output; 
     exit 0 
    | pid -> 
     Unix.close output; 
     let input = Unix.in_channel_of_descr input in 
     fun() -> 
      let v = Marshal.from_channel input in 
      ignore (Unix.waitpid [] pid); 
      close_in input; 
      match v with 
      | `Res x -> x 
      | `Exn e -> raise e 
संबंधित मुद्दे