2011-06-23 1 views
-1

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

Общие операции:

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

Edit: программа не имеет плавающей номера позиций

+0

Какие цифры вы рассчитываете? Числа или целые числа с плавающей запятой? –

+0

Просто целые числа. Нет плавающей запятой. – Erandros

+0

Почему вы используете 'pow()' с целыми числами? –

ответ

5

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

0

Подсказки: -
1) modulo 2 работает только на последнем бит.
2) Функции мощности могут быть реализованы во время входа в систему, где n - мощность. (Математическая библиотека должна быть достаточно быстрой, хотя). Также для быстрой мощности you may check this out

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

+0

1) Итак, когда я делаю X% 2, программа вернет значение своего первого бита? Так что это не медленно. 2) Я использую pow из математической библиотеки btw – Erandros

2

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

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

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