1

我正在运行一个来自 PHYLIP ( http://evolution.genetics.washington.edu/phylip/doc/dnadist.html ) 的名为 dnadist 的程序。这会根据您输入的序列数创建一个 dna 距离矩阵。

目前,我想从 14,778 个序列中创建一个矩阵。我提交此文件以在我大学的 HPCC 上运行,根据我的计算估计需要 10 天才能运行。

我想请求更多的内核来加快时间,但我对这是否可以拆分运行的算法感到困惑?还是必须全部在 1 个核心上运行?我的假设是我必须更改算法本身以溢出正在生成的矩阵,然后将它们全部连接在一起。这是正确的假设吗?

4

2 回答 2

2

我不确定这里有几件事: phylip 是如何进行成对比较的(如果它同时进行,那就是一个地狱计算!),你正在测序什么(细菌蛋白质比小麦更容易适应记忆的数量级基因组将是)以及如何设置在 HPCC 上运行(phylip 是 CI 相信的,那么它是如何部署的?)。

简而言之,基因分析一直在进行,因此编写定制程序来自己进行可能是行不通的。还有其他工具,例如 MEGA,可以为您仔细计算距离,但值得看看文献中针对您的问题使用了什么以及在什么硬件上使用。也许还可以尝试 R 的dist.dna()函数?如果您想将此(链接)并行化,则可以,但是您需要一些狡猾的扑克来确保在组合它们之前完成所有距离。

计算速度重要吗?如果您有 15,000 个完整的细菌序列(假设每个序列为 1,300 kbp),那么它们将适合一台像样的机器上的内存。同样,我的猜测是有人已经有了可以做到这一点的东西,在桌面上躺几天就可以了,让你有机会写下你的介绍和方法!

于 2018-09-24T08:10:28.283 回答
1

是的,您可以并行化,这是使用 HPCC 的要点。不阅读您的代码很难回答。我假设您的代码类似于:

EXPORT CalculateDistances :=FUNCTION(parameters)
    // For each parameter do your DNA magic(matrix calculation) 
    RETURN something;
END;

result:= CalculateDistances(A,B,C,D...);
OUTPUT(result, named('result'));

您可以使用PARALLEL ECL 命令并在 Thor(而不是 HThor)中运行 workunit ,将函数编码与基本矩阵计算并行化。

EXPORT CalculateDistance :=FUNCTION(Matrix1, Matrix2)
    // Your DNA magic(basic matrix calculation) for Matrix1&Matrix2
    RETURN something;
END;

result01:= CalculateDistance(A,B);
result02:= CalculateDistance(A,C);
result03:= CalculateDistance(A,D);
result04:= CalculateDistance(B,A);
result05:= CalculateDistance(B,C);
result06:= CalculateDistance(B,D);
result07:= CalculateDistance(C,A);
result08:= CalculateDistance(C,B);
result09:= CalculateDistance(C,D);
result10:= CalculateDistance(D,A);
result11:= CalculateDistance(D,B);
result12:= CalculateDistance(D,C);

executeCalculates := PARALLEL(
        result01,
        result02,
        result03,
        result04,
        result05,
        result06,
        result07,
        result08,
        result09,
        result10,
        result11,
        result12
);

executeCalculates;
于 2018-09-24T08:04:34.093 回答