стоило бы использовать inline :: C для ускорения математики - PullRequest
5 голосов
/ 05 июля 2011

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

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

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

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

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

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

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

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

0 голосов
/ 06 июля 2011

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

Я не видел в этом коде ничего, что однозначно было бы похоже на «цикл, который складывает мои значения»;пожалуйста, покажите только тот код, который вы планируете оптимизировать, в идеале достаточно структуры, достаточной для его фактического запуска.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...