/mobile Handheld Friendly website
x64 Ubuntu : Intel® Q6600® quad-core |
Each table row shows performance measurements for this ATS program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 250,000 | 0.44 | 0.45 | 5,056 | 3238 | 0% 2% 0% 100% |
| 2,500,000 | 4.76 | 4.77 | 16,052 | 3238 | 1% 100% 0% 0% |
| 25,000,000 | 41.54 | 41.57 | 125,912 | 3238 | 0% 0% 0% 100% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read k-nucleotide benchmark to see what this program should do.
ATS/Anairiats version 0.2.9
(* ** The Computer Language Benchmarks Game ** http://benchmarksgame.alioth.debian.org/ ** ** contributed by Hongwei Xi ** ** compilation command: ** atscc -O3 k-nucleotide2.dats -o k-nucleotide2 -D_ATS_GCATS *) (* ****** ****** *) staload "libc/SATS/stdio.sats" staload "libc/SATS/stdlib.sats" staload "libc/SATS/string.sats" staload _(*anonymous*) = "prelude/DATS/array.dats" staload _(*anonymous*) = "prelude/DATS/list_vt.dats" (* ****** ****** *) // The hashtable implementation is based on linear-probing // #include "symtbl.dats" (* ****** ****** *) %{^ typedef char *symbol_t ; typedef struct { symbol_t sym ; int cnt ; } tblent_t ; %} (* ****** ****** *) abstype dna_t // boxed type abst@ype symbol_t = $extype "symbol_t" abstype symtbl_t // boxed type extern fun symtbl_make (dna: dna_t, size: Nat) : symtbl_t extern fun symtbl_clear (tbl: symtbl_t) : void = "symtbl_clear" extern fun symtbl_search (tbl: symtbl_t, name: String) : int = "symtbl_search" extern fun symtbl_insert (tbl: symtbl_t, sym: symbol_t, cnt: int) : void = "symtbl_insert" extern fun symtbl_fold {a:viewt@ype} (tbl: symtbl_t, f: &(symbol_t, int, &a) -<clo> void, res: &a) : void extern fun symtbl_dna_get (tbl: symtbl_t): dna_t = "symtbl_dna_get" extern fun symtbl_symlen_get (tbl: symtbl_t): int = "symtbl_symlen_get" extern fun symtbl_symlen_set (tbl: symtbl_t, len: int): void = "symtbl_symlen_set" (* ****** ****** *) abst@ype tblent_t = $extype "tblent_t" viewtypedef symtbl (sz:int, n:int, l:addr) = @{ dna= dna_t , ptr= ptr l , view_arr= @[tblent_t][sz] @ l , view_arr_gc= free_gc_v l , size= int sz , symlen= int , nitm= int n } viewtypedef symtbl0 = symtbl (0, 0, null) viewtypedef symtbl = [sz,n:nat | sz > 0] [l:addr] symtbl (sz, n, l) assume symtbl_t = [l_tbl: addr] (vbox (symtbl @ l_tbl) | ptr l_tbl) (* ****** ****** *) implement symtbl_dna_get (tbl) = begin let val (vbox pf_tbl | p_tbl) = tbl in p_tbl->dna end end (* end of [symtbl_dna_get] *) implement symtbl_symlen_get (tbl) = begin let val (vbox pf_tbl | p_tbl) = tbl in p_tbl->symlen end end (* end of [symtbl_symlen_get] *) implement symtbl_symlen_set (tbl, len) = begin let val (vbox pf_tbl | p_tbl) = tbl in p_tbl->symlen := len end end (* end of [symtbl_symlen_set] *) (* ****** ****** *) extern fun print_symbol (sym: symbol_t, len: int): void = "print_symbol" %{^ ats_void_type print_symbol (symbol_t sym, ats_int_type len) { while (len > 0) { fputc ( *sym, stdout) ; --len ; ++sym ; } return ; } %} (* ****** ****** *) extern fun hash_string {n:nat} (s: string n, n: size_t n):<> uInt = "hash_string" extern fun hash_symbol (sym: symbol_t, len: int):<> uInt = "hash_symbol" %{^ // a commonly used simple hash function static // inline ats_uint_type hash_symbol (symbol_t sym, ats_int_type len) { unsigned int hash_val = 0 ; while (len >= 4) { hash_val += hash_val * 33 ; hash_val += sym[0] << 24 ; hash_val += sym[1] << 16 ; hash_val += sym[2] << 8 ; hash_val += sym[3] ; sym += 4 ; len -= 4 ; } // end of [while] if (len >= 2) { hash_val = hash_val * 33 + (sym[0] << 8) + sym[1] ; sym += 2 ; len -= 2 ; } // end of [if] if (len >= 1) { hash_val = hash_val * 33 + sym[0] ; } // end of [while] return hash_val ; } static inline ats_uint_type hash_string (ats_ptr_type str, ats_size_type len) { return hash_symbol (str, len) ; } %} (* ****** ****** *) %{^ ats_ptr_type tblent_array_make (ats_int_type sz) { return ats_calloc_gc (sz, sizeof(tblent_t)) ; } /* end of [tblent_array_make] */ %} extern fun tblent_array_make {sz: nat} (sz: int sz) :<> [l:addr] (free_gc_v l, array_v (tblent_t, sz, l) | ptr l) = "tblent_array_make" (* ****** ****** *) implement symtbl_make (dna, sz) = (pfbox | p_tbl) where { val sz = max (sz, 1) val (pf_tbl_gc, pf_tbl | p_tbl) = ptr_alloc_tsz {symtbl0} (sizeof<symtbl0>) val (pf_arr_gc, pf_arr | p_arr) = tblent_array_make (sz) val () = begin p_tbl->dna := dna; p_tbl->ptr := p_arr; p_tbl->view_arr := pf_arr; p_tbl->view_arr_gc := pf_arr_gc; p_tbl->size := sz; p_tbl->symlen := 0; p_tbl->nitm := 0 end (* end of [val] *) prval () = free_gc_elim (pf_tbl_gc) val (pfbox | ()) = vbox_make_view_ptr (pf_tbl | p_tbl) } // symtbl_make (* ****** ****** *) extern fun tblent_array_clear {sz:nat} {l:addr} (pf: !array_v (tblent_t, sz, l) | p: ptr l, sz: int sz):<> void = "tblent_array_clear" %{ ats_void_type tblent_array_clear (ats_ptr_type p, ats_int_type sz) { memset (p, 0, sz * sizeof(tblent_t)) ; return ; } /* end of [tblent_array_clear] */ %} implement symtbl_clear (tbl) = () where { val (vbox pf_tbl | p_tbl) = tbl val () = tblent_array_clear (p_tbl->view_arr | p_tbl->ptr, p_tbl->size) val () = p_tbl->nitm := 0 } (* end of [symtbl_clear] *) // (* ****** ****** *) // linear probing extern fun symtbl_search_probe {sz,i:nat | i < sz} {l:addr} ( pf: !array_v(tblent_t, sz, l) | p: ptr l, sz: int sz, len: int, name: string, i: int i ) :<> int = "symtbl_search_probe" %{ ats_int_type symtbl_search_probe (ats_ptr_type p, ats_int_type sz, ats_int_type len, ats_ptr_type name, ats_int_type i) { tblent_t *ent ; symbol_t sym; ent = ((tblent_t*)p) + i ; while (1) { sym = ent->sym ; if (sym == (symbol_t)0) return 0 ; // the entry is unoccupied if (!strncmp (sym, (char*)name, len)) { return ent->cnt ; } i += 1 ; if (i >= sz) { i = 0 ; ent = (tblent_t*)p ; } else ent += 1; } // end of [while] } /* end of [symtbl_search_probe] */ %} implement symtbl_search (tbl, name) = let val hash_val = hash_string (name, string1_length name) (* val () = begin prerr "symtbl_search: hash_val = "; prerr hash_val; prerr_newline () end // end [val] *) val (vbox pf_tbl | p_tbl) = tbl val i = hash_val uimod p_tbl->size in symtbl_search_probe ( p_tbl->view_arr | p_tbl->ptr, p_tbl->size, p_tbl->symlen, name, i ) end // end of [symtbl_search] (* ****** ****** *) extern fun symtbl_insert_probe {sz,i:nat | i < sz} {l:addr} (pf: !array_v (tblent_t, sz, l) | p: ptr l, sz: int sz, len: int, sym: symbol_t, cnt: int, i: int i) :<> bool = "symtbl_insert_probe" %{ ats_bool_type symtbl_insert_probe (ats_ptr_type p, ats_int_type sz, ats_int_type len, symbol_t sym, ats_int_type cnt, ats_int_type i) { tblent_t *ent ; ent = ((tblent_t*)p) + i ; while (ent->sym) { if (strncmp (ent->sym, sym, len) == 0) { if (cnt > 0) ent->cnt = cnt ; else ent->cnt += 1 ; return 0 ; } i += 1; if (i >= sz) { i = 0 ; ent = (tblent_t*)p ; } else ent += 1 ; } ent->sym = sym ; if (cnt > 0) ent->cnt = cnt ; else ent->cnt = 1 ; return 1 ; } %} (* ****** ****** *) implement symtbl_insert (tbl, sym, cnt) = let val (vbox pf_tbl | p_tbl) = tbl val len = p_tbl->symlen val hash_val = hash_symbol (sym, len) val i = hash_val uimod p_tbl->size val is_new = symtbl_insert_probe (p_tbl->view_arr | p_tbl->ptr, p_tbl->size, len, sym, cnt, i) in if is_new then p_tbl->nitm := 1 + p_tbl->nitm else () end // end of [symtbl_insert] (* ****** ****** *) extern fun tblent_array_fold {a:viewt@ype} {sz: nat} {l:addr} ( pf: !array_v (tblent_t, sz, l) | p: ptr l, sz: int sz, f: &(symbol_t, int, &a) -<clo> void, res: &a ) :<> void = "tblent_array_fold" %{ ats_void_type tblent_array_fold (ats_ptr_type p, ats_int_type sz, ats_ref_type f, ats_ptr_type res) { int i ; tblent_t *ent ; i = 0 ; ent = (tblent_t*)p ; while (i < sz) { if (!ent->sym) { i += 1; ent += 1; continue ; } ((ats_void_type ( *)(ats_clo_ptr_type, symbol_t, ats_int_type, ats_ptr_type))(ats_closure_fun(f)))(f, ent->sym, ent->cnt, res) ; i += 1 ; ent += 1 ; } // end of [while] return ; } %} implement symtbl_fold {a} (tbl, f, res) = let val (vbox pf_tbl | p_tbl) = tbl in tblent_array_fold {a} (p_tbl->view_arr | p_tbl->ptr, p_tbl->size, f, res) end // end of [symtbl_insert] (* ****** ****** *) extern fun dna_count {n,k:nat | k <= n} (tbl: symtbl_t, n: size_t n, k: size_t k) : symtbl_t = "dna_count" typedef symflt = @(symbol_t, float) fn compare_symflt_symflt // [>=] (x1: &symflt, x2: &symflt):<> Sgn = compare_float_float (x2.1, x1.1) // end of [compare_symflt_symflt] viewtypedef frqlst = List_vt symflt // print and free fun print_free_frqlst (kfs: frqlst, len: int): void = begin case+ kfs of | ~list_vt_cons (kf, kfs) => begin print_symbol (kf.0, len); printf (" %.3f\n", @(double_of kf.1)); print_free_frqlst (kfs, len) end // end of [FRQLSTcons] | ~list_vt_nil () => () end // end of [print_free_frqlst] fn write_frequencies {n,k:nat | k <= n} (tbl: symtbl_t, n: size_t n, k: size_t k): void = let val tbl = dna_count (tbl, n, k) var total: int = (0: int) var !p_clo = @lam (k: symbol_t, cnt: int, res: &int): void =<clo> (res := res + cnt) val () = symtbl_fold {int} (tbl, !p_clo, total); val ftotal = float_of total var frqs: frqlst = list_vt_nil () var !p_clo = @lam (k: symbol_t, cnt: int, res: &frqlst): void =<clo> let val f = (float_of 100) * float_of cnt / ftotal; val kf = @(k, f) in res := list_vt_cons (kf, res) end // end of [f] val () = symtbl_fold {frqlst} (tbl, !p_clo, frqs) val () = list_vt_quicksort (frqs, compare_symflt_symflt) in print_free_frqlst (frqs, symtbl_symlen_get tbl) end // end of [write_frequencies] (* ****** ****** *) fn write_count {n,k:nat} (tbl: symtbl_t, n: size_t n, seq: string k): void = let val k = string1_length seq val () = assert (k <= n) val tbl = dna_count (tbl, n, k) val cnt = symtbl_search (tbl, seq) in printf ("%d\t%s\n", @(cnt, seq)) end // end of [write_count] (* ****** ****** *) extern fun getline (): string = "__getline" extern fun getrest (sz: &size_t? >> size_t n): #[n:nat] string n = "__getrest" %{$ #define LINEBUFSZ 1024 char theLineBuffer[LINEBUFSZ] ; ats_ptr_type __getline () { fgets (theLineBuffer, LINEBUFSZ, stdin) ; return theLineBuffer ; } /* end of [getline] */ #define RESTBUFSZ (128 * 1024 * 1024) char theRestBuffer[RESTBUFSZ] ; ats_ptr_type __getrest (ats_ref_type p_n) { int c ; size_t i ; char *s ; s = theRestBuffer ; i = 0 ; while ((c = fgetc(stdin)) != EOF) { if (c != '\n') { *s++ = toupper(c) ; i++ ; } } *s = '\000' ; *((size_t*)p_n) = i ; if (i >= RESTBUFSZ) { fprintf (stderr, "exit(ATS): too much data for processing\n") ; exit(1) ; } return theRestBuffer ; } /* end of [__getrest] */ %} (* ****** ****** *) fun is_three (s: string): bool = if strncmp (s, ">THREE", 6) = 0 then true else false // end of [is_three] (* ****** ****** *) extern fun dna_of_string (s: string): dna_t = "dna_of_string" implement main (argc, argv) = let fun dna_three_get (n: &size_t? >> size_t n): #[n:nat] string n = let val s = getline (); val is3 = is_three (s) in if is3 then getrest (n) else dna_three_get (n) end // end of [dna_three_get] var n: size_t // uninitialized val dna_three = dna_three_get (n) val () = assert (n >= 2) (* val () = (prerr "main: n = "; prerr n; prerr_newline ()) *) val dna3 = dna_of_string dna_three where { extern castfn dna_of_string (str: string): dna_t } val dna_table = symtbl_make (dna3, (*393241*)196613(*98317*)) in write_frequencies (dna_table, n, 1) ; print_newline () ; write_frequencies (dna_table, n, 2) ; print_newline () ; write_count (dna_table, n, "GGT") ; write_count (dna_table, n, "GGTA") ; write_count (dna_table, n, "GGTATT") ; write_count (dna_table, n, "GGTATTTTAATT") ; write_count (dna_table, n, "GGTATTTTAATTTATAGT") ; end (* end of [main] *) (* ****** ****** *) %{$ ats_ptr_type dna_count (ats_ptr_type tbl, ats_size_type n, ats_size_type k) { char *sym ; symtbl_clear (tbl) ; symtbl_symlen_set (tbl, k) ; sym = (char*)symtbl_dna_get (tbl) ; while (n >= k) { symtbl_insert (tbl, sym, 0) ; n -= 1 ; sym += 1 ; } return tbl ; } %} (* ****** ****** *) (* end of [k-nucleotide2.dats] *)
Tue, 22 Jan 2013 19:23:45 GMT MAKE: /usr/local/src/ats-lang-anairiats-0.2.9/bin/atscc -D_GNU_SOURCE -D_ATS_MULTITHREAD -D_ATS_GCATS -lpthread -pipe -Wall -O3 -fomit-frame-pointer -march=native knucleotide.dats -o knucleotide.ats-2.ats_run /usr/local/src/ats-lang-anairiats-0.2.9/bin/atsopt --output knucleotide_dats.c --dynamic knucleotide.dats /usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ats_prelude.c: In function ‘ats_pthread_create_detached’: /usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ats_prelude.c:181:3: warning: implicit declaration of function ‘gc_pthread_create’ [-Wimplicit-function-declaration] In file included from knucleotide_dats.c:19:0: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats: In function ‘atspre_fprint_newline’: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats:271:11: warning: variable ‘n2’ set but not used [-Wunused-but-set-variable] /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats:271:7: warning: variable ‘n1’ set but not used [-Wunused-but-set-variable] knucleotide_dats.c: In function ‘symtbl_dna_get’: knucleotide_dats.c:290:1: warning: label ‘__ats_lab_symtbl_dna_get’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘symtbl_symlen_get’: knucleotide_dats.c:306:1: warning: label ‘__ats_lab_symtbl_symlen_get’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘symtbl_symlen_set’: knucleotide_dats.c:322:1: warning: label ‘__ats_lab_symtbl_symlen_set’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘_2home_2dunham_2benchmarksgame_quadcore_2knucleotide_2tmp_2knucleotide_2edats__symtbl_make’: knucleotide_dats.c:344:1: warning: label ‘__ats_lab__2home_2dunham_2benchmarksgame_quadcore_2knucleotide_2tmp_2knucleotide_2edats__symtbl_make’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘symtbl_clear’: knucleotide_dats.c:374:1: warning: label ‘__ats_lab_symtbl_clear’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘symtbl_search’: knucleotide_dats.c:400:1: warning: label ‘__ats_lab_symtbl_search’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘symtbl_insert’: knucleotide_dats.c:432:1: warning: label ‘__ats_lab_symtbl_insert’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘_2home_2dunham_2benchmarksgame_quadcore_2knucleotide_2tmp_2knucleotide_2edats__symtbl_fold’: knucleotide_dats.c:463:1: warning: label ‘__ats_lab__2home_2dunham_2benchmarksgame_quadcore_2knucleotide_2tmp_2knucleotide_2edats__symtbl_fold’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘compare_symflt_symflt_8’: knucleotide_dats.c:482:1: warning: label ‘__ats_lab_compare_symflt_symflt_8’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘print_free_frqlst_9’: knucleotide_dats.c:527:1: warning: label ‘__ats_lab_1_1’ defined but not used [-Wunused-label] knucleotide_dats.c:510:1: warning: label ‘__ats_lab_0_1’ defined but not used [-Wunused-label] knucleotide_dats.c:508:1: warning: label ‘__ats_lab_0_0’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘__ats_fun_11’: knucleotide_dats.c:543:1: warning: label ‘__ats_lab___ats_fun_11’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘__ats_fun_12’: knucleotide_dats.c:580:1: warning: label ‘__ats_lab___ats_fun_12’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘loop_15’: knucleotide_dats.c:642:1: warning: label ‘__ats_lab_3_1’ defined but not used [-Wunused-label] knucleotide_dats.c:630:1: warning: label ‘__ats_lab_2_1’ defined but not used [-Wunused-label] knucleotide_dats.c:628:1: warning: label ‘__ats_lab_2_0’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘list_vt_length_01585_anairiats_rec_2’: knucleotide_dats.c:658:1: warning: label ‘__ats_lab_list_vt_length_01585_anairiats_rec_2’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘loop_17’: knucleotide_dats.c:693:1: warning: label ‘__ats_lab_5_1’ defined but not used [-Wunused-label] knucleotide_dats.c:680:1: warning: label ‘__ats_lab_4_1’ defined but not used [-Wunused-label] knucleotide_dats.c:678:1: warning: label ‘__ats_lab_4_0’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘array_ptr_initialize_lst_01310_anairiats_rec_2’: knucleotide_dats.c:708:1: warning: label ‘__ats_lab_array_ptr_initialize_lst_01310_anairiats_rec_2’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘loop_18’: knucleotide_dats.c:747:1: warning: label ‘__ats_lab_7_1’ defined but not used [-Wunused-label] knucleotide_dats.c:732:1: warning: label ‘__ats_lab_6_1’ defined but not used [-Wunused-label] knucleotide_dats.c:730:1: warning: label ‘__ats_lab_6_0’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘list_vt_quicksort_01609_anairiats_rec_2’: knucleotide_dats.c:770:1: warning: label ‘__ats_lab_list_vt_quicksort_01609_anairiats_rec_2’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘write_frequencies_10’: knucleotide_dats.c:803:1: warning: label ‘__ats_lab_write_frequencies_10’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘write_count_19’: knucleotide_dats.c:838:1: warning: label ‘__ats_lab_write_count_19’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘is_three_20’: knucleotide_dats.c:859:1: warning: label ‘__ats_lab_is_three_20’ defined but not used [-Wunused-label] knucleotide_dats.c: In function ‘mainats’: knucleotide_dats.c:915:1: warning: label ‘__ats_lab_mainats’ defined but not used [-Wunused-label] In file included from knucleotide_dats.c:29:0: knucleotide_dats.c: At top level: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/pointer.cats:52:14: warning: ‘atspre_null_ptr’ defined but not used [-Wunused-variable] In file included from knucleotide_dats.c:30:0: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:57:1: warning: ‘atspre_fprintf_err’ defined but not used [-Wunused-function] /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:69:1: warning: ‘atspre_fprintf_exn’ defined but not used [-Wunused-function] /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:105:1: warning: ‘atspre_prerrf_exn’ defined but not used [-Wunused-function] In file included from knucleotide_dats.c:33:0: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/string.cats:351:14: warning: ‘atspre_stropt_none’ defined but not used [-Wunused-variable] knucleotide_dats.c:244:18: warning: ‘__ats_fun_11_closure_make’ declared ‘static’ but never defined [-Wunused-function] knucleotide_dats.c:250:18: warning: ‘__ats_fun_12_closure_make’ declared ‘static’ but never defined [-Wunused-function] knucleotide_dats.c: In function ‘__getline’: knucleotide_dats.c:1059:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result] gcc -I/usr/local/src/ats-lang-anairiats-0.2.9/ -I/usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ -L/usr/local/src/ats-lang-anairiats-0.2.9/ccomp/lib64/ /usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ats_prelude.c -D_GNU_SOURCE -D_ATS_MULTITHREAD -D_ATS_GCATS -lpthread -pipe -Wall -O3 -fomit-frame-pointer -march=native knucleotide_dats.c -o knucleotide.ats-2.ats_run /usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/GCATS/gc_mt.o -lats_mt -lats 0.56s to complete and log all make actions COMMAND LINE: ./knucleotide.ats-2.ats_run 0 < knucleotide-input25000000.txt PROGRAM OUTPUT: A 30.295 T 30.151 C 19.800 G 19.754 AA 9.177 TA 9.132 AT 9.131 TT 9.091 CA 6.002 AC 6.001 AG 5.987 GA 5.984 CT 5.971 TC 5.971 GT 5.957 TG 5.956 CC 3.917 GC 3.911 CG 3.909 GG 3.902 1471758 GGT 446535 GGTA 47336 GGTATT 893 GGTATTTTAATT 893 GGTATTTTAATTTATAGT gc_collect: nother = 0 gc_collect: nother = 0 gc_collect: nother = 0