/mobile Handheld Friendly website
Ubuntu : Intel® Q6600® one core |
Each table row shows performance measurements for this Erlang HiPE program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 250,000 | 3.18 | 3.23 | 67,140 | 930 | 0% 0% 0% 100% |
| 2,500,000 | 27.84 | 27.87 | 477,376 | 930 | 0% 0% 0% 100% |
| 25,000,000 | Failed | 930 |
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.
Erlang R16B (erts-5.10.1) [source] [async-threads:10] [hipe] [kernel-poll:false]
% The Computer Language Benchmarks Game % http://benchmarksgame.alioth.debian.org/ %% contributed by Fredrik Svahn based on an earlier submission %% by Kenneth Johansson, Vlad Dumitrescu and Ulf Wiger -module(knucleotide). -export([main/1]). to_upper(<<C, Cs/binary>>, Acc) when C >= $a, C =< $z -> to_upper(Cs, [C-($a-$A)| Acc]); to_upper(<<$\n, Cs/binary>>, Acc) -> to_upper(Cs, Acc); to_upper(<<C, Cs/binary>>, Acc) -> to_upper(Cs, [C | Acc]); to_upper(<<>>, Acc) -> lists:reverse(Acc). %% Read and discard until start of third segment seek_three() -> case io:get_line('') of <<">TH", _/binary>> -> done; eof -> erlang:error(eof); _ -> seek_three() end. %% Read third segment get_seq_three(Seq) -> case io:get_line('') of eof -> iolist_to_binary(lists:reverse(Seq)); Str -> get_seq_three([to_upper(Str, [])|Seq]) end. %% Generate frequency hash table gen_freq_table(FreqT, Seq, Len) -> gen_freq_table(Seq, Len, FreqT, size(Seq)-Len). gen_freq_table(_, _, _, -1) -> done; gen_freq_table(Seq, Len, FreqT, Dec) -> <<_:Dec/binary, Key:Len/binary, _/binary>> = Seq, update_counter(Key, FreqT), gen_freq_table(Seq, Len, FreqT, Dec-1). %% Update hash table counter for already existing pattern or insert new update_counter(Key, FreqT) -> try ets:update_counter(FreqT, Key, 1) of _ -> ok catch error:badarg -> ets:insert(FreqT, {Key, 1}) end. %% Print the frequency table in the right order print_freq_table(FreqT) -> FreqList = lists:reverse(lists:keysort(2, ets:tab2list(FreqT))), Tot = lists:foldr(fun({_, Cnt}, Acc)-> Acc + Cnt end, 0, FreqList), lists:foreach(fun({Nucleoid, Cnt})-> io:fwrite("~s ~.3f\n",[Nucleoid, Cnt*100/Tot]) end, FreqList), io:fwrite("\n"). %% Print number of occurrences for a specific pattern print_count(FreqT, Pattern) -> case ets:lookup(FreqT, Pattern) of [{_, Value}] -> io:fwrite("~w\t~s\n",[Value, Pattern]); [] -> io:fwrite("~w\t~s\n",[0, Pattern]) end. %% Spawn a worker process with its own hash table do({PrintFun, Pattern}, Seq) -> spawn( fun()-> FreqT = ets:new(hash, [set]), gen_freq_table(FreqT, Seq, size(Pattern)), %Work is done, wait for token and print receive Pids -> PrintFun(FreqT, Pattern), hd(Pids) ! tl(Pids) end, ets:delete(FreqT) end ). main(_Arg) -> io:setopts(standard_io, [binary]), seek_three(), Seq = get_seq_three([]), PrintFreq = fun(Res, _Pattern)-> print_freq_table(Res) end, PrintCount = fun(Res, Pattern)-> print_count(Res, Pattern) end, Actions = [{PrintFreq, <<"?">>}, {PrintFreq, <<"??">>}, {PrintCount, <<"GGT">>}, {PrintCount, <<"GGTA">>}, {PrintCount, <<"GGTATT">>}, {PrintCount, <<"GGTATTTTAATT">>}, {PrintCount, <<"GGTATTTTAATTTATAGT">>}], Pids = [ do(Action, Seq) || Action <- Actions ], %Pass token to print in right order hd(Pids) ! tl(Pids) ++ [self()], receive _Pid -> halt(0) end.
Mon, 04 Mar 2013 22:08:20 GMT
MAKE:
mv knucleotide.hipe knucleotide.erl
/usr/local/src/otp_src_R16B_nosmp/bin/erlc +native +"{hipe, [o3]}" knucleotide.erl
rm knucleotide.erl
0.86s to complete and log all make actions
COMMAND LINE:
/usr/local/src/otp_src_R16B_nosmp/bin/erl -smp disable -noshell -run knucleotide main 0 < knucleotide-input25000000.txt
PROGRAM FAILED
PROGRAM OUTPUT:
Crash dump was written to: erl_crash.dump
eheap_alloc: Cannot allocate 790960704 bytes of memory (of type "heap").