2009年9月23日星期三

Re: 一个基于位数组的序列覆盖率分析器 (Was Re: [PerlChina] Re: 在我遇到的这种情况下散列和数组哪个快?)

2009/9/23 空格 <ribozyme2004@gmail.com>
从一个基因组中取了50M大小的一段序列测试了一下,比较成功。top显示的结果如下:


Yay! 我刚刚又对 appears 进行了一些改进,现发布 v0.02:

  http://github.com/agentzh/appears/downloads

主要改动如下:

1. 代码命名调整:使用 token 来表示核苷,而非有歧议的 char 这个术语
2. 在代码中进一步去除“神秘的数”
3. 按 gcc 要求启用 large file 支持(原先的 v0.01 在 Linux 上读取 4 GB 的文件会报错: "Value too large for defined data type")
4. 添加了 t/gensample.pl 和 t/gensample.c 这两个程序,用来生成指定大小的随机序列文件(默认为 4.8 G)。

gensample.pl 和 gensample.c 的功能相同,但性能有明显差别:Perl 实现大约 1 秒生成 1 MB 的序列,而后者,即 C 实现, 1 秒大约生成 20 MB 的序列。

我使用 gensample.c 程序生成了一个 4 GB 大小的随机序列文件,其输出如下:

    $ time t/gensample > samples/big.txt
    real    2m25.392s
    user    2m11.432s
    sys    0m6.148s

    $ ls -lh samples/big.txt
    -rw-r--r-- 1 agentz agentz 4.0G 2009-09-24 10:20 samples/big.txt

    $ time ./appears samples/big.txt > /tmp/out.txt
    INFO: Reading file samples/big.txt...
    INFO: Using a bit array of length 1073741824 (sequence length: 15).
    INFO: Searching missing combinations of sequences...

    real    7m36.456s
    user    6m59.882s
    sys    0m9.977s

在我的 Core2Duo T9600, SATA 7600rpm disk 的本本上,一共只需要 7 分半钟的时间,呵呵。

可以看到,appears占用了2G的内存的6.5%,正好是大约130M。和几位大大估算的非常一致。因为程序是把结果打印到屏幕的,所以
konsle有占用很多的cpu资源。


结果最好重定向到磁盘文件,就像上面所演示的那样,呵呵。

Cheers,
-agentzh

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

没有评论: