Стоило бы использовать inline::C для ускорения математики

Я работал над программой Perl для обработки большого количества ДНК. Он выводит именно то, что мне нужно, однако это занимает гораздо больше времени, чем мне хотелось бы, используя NYTprof. Я сузил основные проблемные области, чтобы получить цикл, который складывает мои значения вместе. будет использовать inline::C для математики, чтобы сделать мою программу быстрее, или я должен принять скорость и двигаться дальше? Есть ли другой способ улучшить скорость? Вот моя программа и вход, который она будет выполнять, а также исполняемый файл с уже введенными значениями по умолчанию.

2 ответа

Решение

Вряд ли вы получите здесь полезную помощь (в том числе). Я вижу различные проблемы с вашим кодом, и ни одна из них не связана с выбором языка.

  1. используйте CPAN. Если вы разбираете genbank, используйте какой-нибудь подходящий модуль.

  2. Вы пишете ассемблер на Perl, и ни Perl, ни вы не очень хороши в этом. Почти невозможно узнать, что происходит, когда вы не передаете параметры подпрограммам, вместо этого полагаясь на глобальные переменные повсюду. Что @X1, @X2, @Y1, @Y2 имею в виду?

  3. Следующее может быть вашей проблемой: until ($ender - $starter > $tlength) { (строка 153). Согласно вашему тесту, они начинаются с 103, 1 и 200, и неясно, когда они изменятся или нет. В зависимости от того, что в @teэто может или не может когда-либо выйти из цикла; Я просто не могу сказать по твоему коду.

  4. Было бы полезно, если бы мы точно знали, каковы параметры для add, входящие-выходные инварианты, и что это возвращает.

Это все, что я получил.

Вторую рекомендацию PDL я изложил в комментарии, если это применимо. Или использование CPAN-модуля, адаптированного к вашей проблеме (опять же, если применимо).

В этом коде я не видел ничего, что выглядело бы однозначно как "цикл, который складывает мои значения"; Пожалуйста, покажите только тот код, который вы планируете оптимизировать, в идеале с достаточной структурой для его запуска.

Итак, чтобы ответить на ваш общий вопрос в общих чертах, да, Inline::C может быть полезным инструментом для оптимизации, если вы уверены, что ваша проблема производительности ограничена тем, что она на самом деле может сделать для вас. При его использовании следует помнить, что вызов кода C из Perl или наоборот не так уж и дорог, поэтому вам нужно иметь достаточно кода, переведенного в C, чтобы минимизировать переходы.

Другие вопросы по тегам