Запуск матричного алгоритма на сколько ядер?

Я запускаю программу под названием dnadist от PHYLIP ( http://evolution.genetics.washington.edu/phylip/doc/dnadist.html). Это создает матрицу расстояний ДНК из числа введенных вами последовательностей.

В настоящее время я хочу создать матрицу из 14 778 последовательностей. Я отправляю это на HPCC моего университета, и, согласно моей расчетной оценке, это займет 10 дней.

Я хочу запросить больше ядер, чтобы ускорить время, но я не понимаю, можно ли разделить работающий алгоритм? Или все должно работать на 1 ядре? Мое предположение состоит в том, что мне придется изменить сам алгоритм, чтобы разлить производимую матрицу, а затем объединить все вместе. Это правильно предположить?

2 ответа

Я не уверен в некоторых вещах здесь: как phylip выполняет парные сравнения (если это все сразу, это вычисление helluva!), Что вы секвенируете (бактериальные белки на несколько порядков легче вписываются в память, чем пшеница Геном будет) и как это настроить для запуска на HPCC (Филип, как я верю, так как он был развернут?).

Короче говоря, генетический анализ проводится все время, поэтому написание программ на заказ, чтобы сделать это самостоятельно, вероятно, не является началом. Существуют и другие инструменты, такие как MEGA, которые могут вычислять расстояния для вас, но стоит посмотреть, что используется в литературе для вашей проблемы и на каком оборудовании. Возможно также попробуйте функцию dist.dna() R? Вы можете это сделать, если вы хотите это сделать ( ссылка), но вам понадобятся некоторые покерные игры, чтобы убедиться, что вы прошли все расстояния, прежде чем их объединить.

Важна ли скорость расчета? Если у вас есть 15 000 целых бактериальных последовательностей (по 1300 кбит / с каждая), они поместятся в память на приличной машине. Опять же, я предполагаю, что у кого-то уже есть что-то, что будет делать это, несколько дней на рабочем столе, у которого вы лежите, в порядке, дает вам возможность написать свое вступление и методы!

Да, вы можете распараллелить, это основной смысл использования 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).

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;
Другие вопросы по тегам