Как ускорить выполнение больших расчетов - PullRequest
0 голосов
/ 23 июня 2011

Я реализую алгоритм сжатия.Дело в том, что для 20-килобайтных файлов требуется секунда, так что это неприемлемо.Я думаю, что это медленно из-за расчетов.
Мне нужны предложения о том, как сделать это быстрее.У меня уже есть несколько советов, таких как смещение битов вместо умножения, но я действительно хочу быть уверен, какие изменения действительно помогают из-за сложности программы.Я также принимаю предложения, касающиеся параметров компилятора, я слышал, что есть способ заставить программу выполнять более быстрые математические вычисления.

Обычные операции:

  • pow (...) функция math библиотеки
  • большое число% 2
  • большоеумножение чисел

Редактировать: в программе нет чисел с плавающей запятой

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

Вопрос о том, как сделать вещи быстрее не должен задаваться здесь другим людям, а скорее в вашей среде - профилировщику. Используйте профилировщик, чтобы определить, на что тратится большая часть времени, и это подскажет вам, какие операции необходимо улучшить, а затем, если вы не знаете, как это сделать, спросите о конкретных операциях. Почти невозможно сказать, что вам нужно изменить, не зная, какой у вас исходный код, и вопрос не дает достаточно информации: pow (...) функция: каковы аргументы функции, показатель зафиксирован? сколько точности вам нужно? Вы можете изменить функцию для чего-то, что даст аналогичный результат? большое число : насколько велико большое в большое число ? что такое число в этом контексте? целые числа? с плавающей точкой?

2 голосов
/ 23 июня 2011

Ваш вопрос очень широкий, без достаточного количества информации, чтобы дать вам конкретный совет, мы имеем дело с общей дорожной картой.

Какая платформа, какой компилятор?Что такое "большое число"?Что вы уже сделали, что вы знаете об оптимизации?

  • Тестирование сборки выпуска с оптимизацией (/ Ox / LTCG в Visual C ++, -O3 IIRC для gcc)
  • Измерениегде тратится время - доступ к диску или фактическая процедура сжатия?
  • Есть ли лучший алгоритм и поток кода?Самая быстрая операция - это операция, которая не выполняется.
  • для файлов размером 20 КБ, рабочий набор памяти не должен быть проблемой (если только ваше сжатие не требует больших структур данных), поэтому оптимизация кода - это действительно следующий шаг
  • современный компилятор уже реализует много оптимизаций, например, заменяя деление на константу степени два с сдвигом в битах.
  • pow очень медленно для нативных целых чисел
  • если ваш код хорошо написан, вы можете попробовать опубликовать его, возможно, кто-то готов принять вызов.
0 голосов
/ 23 июня 2011

Подсказки: -
1) по модулю 2 работает только последний бит.
2) функции мощности могут быть реализованы во время входа в систему, где n - мощность. (Математическая библиотека должна быть достаточно быстрой, хотя). Также для быстрого питания вы можете проверить это

Если ничего не работает, просто проверьте, существует ли какой-нибудь быстрый алгоритм.

...