在多少个内核上运行矩阵算法?

时间:2018-09-21 22:48:54

标签: phylogeny cpu-cores distance-matrix hpcc hpcc-ecl

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

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

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

2 个答案:

答案 0 :(得分:2)

我不确定这里有几件事:phylip如何运行成对比较(如果一次完成所有操作,这是一次helluva计算!),您要测序的内容(细菌蛋白的数量级更容易放入内存中)比小麦基因组要高的多)以及如何在HPCC上运行(CI认为是叶形,因此如何部署它?)。

简而言之,遗传分析一直在进行,因此编写定制的程序来自己做可能不是一个开始。还有其他一些工具,例如MEGA可以为您进行距离计算,但是值得一看的是文献中针对您的问题使用了什么以及有关什么硬件。也许还尝试使用R的dist.dna()函数?如果想对此(link)进行平行化处理,则可以,但是您需要一些曲折的扑克牌,以确保在组合它们之前完成所有距离。

计算速度重要吗?如果您有15,000个完整细菌序列(每个序列为1,300 kbp),则它们将适合一台像样的机器存储。同样,我的猜测是有人已经可以执行此操作,在您躺在桌面上的几天里很好,这使您有机会编写自己的介绍和方法!

答案 1 :(得分:1)

是的,您可以并行化,这是使用HPCC的要点。不读代码很难回答。 我认为您的代码会像这样:

printf ("TOTAL: %d\n", mysqli_num_rows($result));

您可以使用PARALLEL ECL command并在Thor(而不是HThor)中运行工作单元,将函数的编码与基本矩阵计算并行化。

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'));