/mobile Handheld Friendly website
x64 Ubuntu : Intel® Q6600® quad-core |
Each table row shows performance measurements for this OCaml program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 50,000 | 0.15 | 0.08 | ? | 1014 | 33% 43% 78% 50% |
| 500,000 | 1.72 | 0.90 | 315,468 | 1014 | 32% 32% 83% 47% |
| 5,000,000 | 19.34 | 10.97 | 511,684 | 1014 | 26% 88% 26% 38% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read regex-dna benchmark to see what this program should do.
The OCaml native-code compiler, version 4.00.1
(* The Computer Language Benchmarks Game * http://benchmarksgame.alioth.debian.org/ * * Contributed by Christophe TROESTLER * Parallelized by Jon Harrop * Modified by Mauricio Fernandez *) open Printf (* semi-standard function for process-based parallelism *) let invoke (f : 'a -> 'b) x : unit -> 'b = let input, output = Unix.pipe() in match Unix.fork() with | -1 -> Unix.close input; Unix.close output; (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 let variants = ["agggtaaa\\|tttaccct"; "[cgt]gggtaaa\\|tttaccc[acg]"; "a[act]ggtaaa\\|tttacc[agt]t"; "ag[act]gtaaa\\|tttac[agt]ct"; "agg[act]taaa\\|ttta[agt]cct"; "aggg[acg]aaa\\|ttt[cgt]ccct"; "agggt[cgt]aa\\|tt[acg]accct"; "agggta[cgt]a\\|t[acg]taccct"; "agggtaa[cgt]\\|[acg]ttaccct"] (* Remove the "\\" which is mandatory in OCaml regex. *) let re_bs = Str.regexp_string "\\" let to_string = Str.global_replace re_bs "" let subst = ["B", "(c|g|t)"; "D", "(a|g|t)"; "H", "(a|c|t)"; "K", "(g|t)"; "M", "(a|c)"; "N", "(a|c|g|t)"; "R", "(a|g)"; "S", "(c|g)"; "V", "(a|c|g)"; "W", "(a|t)"; "Y", "(c|t)"] (* Read all of a redirected FASTA format file from stdin. *) let file_data, file_length = let b = Buffer.create 0xFFFF and s = String.create 0xFFF and r = ref 1 in while !r > 0 do r := input stdin s 0 0xFFF; Buffer.add_substring b s 0 !r done; Buffer.contents b, Buffer.length b (* Remove FASTA sequence descriptions and all linefeed characters. *) let dna = Str.global_replace (Str.regexp "^>.*$\\|\n") "" file_data let code_length = String.length dna (* Count matches of [re]. *) let count re s = let re = Str.regexp_case_fold re and i = ref 0 and n = ref 0 in try while true do i := 1 + Str.search_forward re s !i; incr n done; assert false with Not_found -> !n let () = List.iter (fun f -> print_endline(f())) (List.map (invoke (fun re -> sprintf "%s %i" (to_string re) (count re dna))) variants); let b = ref dna in List.iter (fun (re, s) -> b := Str.global_replace (Str.regexp_case_fold re) s !b) subst; printf "\n%i\n%i\n%i\n" file_length code_length (String.length !b)
Sat, 02 Feb 2013 20:56:50 GMT MAKE: mv regexdna.ocaml-3.ocaml regexdna.ocaml-3.ml /usr/local/bin/ocamlopt -noassert -unsafe -fno-PIC -nodynlink -inline 100 -fno-PIC unix.cmxa str.cmxa regexdna.ocaml-3.ml -o regexdna.ocaml-3.ocaml_run File "regexdna.ocaml-3.ml", line 1: Warning 24: bad source file name: "Regexdna.ocaml-3" is not a valid module name. rm regexdna.ocaml-3.ml 0.21s to complete and log all make actions COMMAND LINE: ./regexdna.ocaml-3.ocaml_run 0 < regexdna-input5000000.txt PROGRAM OUTPUT: agggtaaa|tttaccct 356 [cgt]gggtaaa|tttaccc[acg] 1250 a[act]ggtaaa|tttacc[agt]t 4252 ag[act]gtaaa|tttac[agt]ct 2894 agg[act]taaa|ttta[agt]cct 5435 aggg[acg]aaa|ttt[cgt]ccct 1537 agggt[cgt]aa|tt[acg]accct 1431 agggta[cgt]a|t[acg]taccct 1608 agggtaa[cgt]|[acg]ttaccct 2178 50833411 50000000 66800214