2012-04-19 2 views
2

Я пишу программу, требующую огромного количества хрустов в любом случае.Скорость чтения памяти по сравнению с простой арифметикой и условными обозначениями

Часто у меня есть возможность либо вычислить значение с помощью {3-4 дополнений или умножений, либо проверки if-else, либо двух, может быть, примерно пяти чисел}, или чтения значения из Справочная таблица. Все внутри.

Насколько быстро память читается в сравнении с такими простыми операциями, примерно?

+3

Невозможно дать количественный ответ, потому что он зависит от многих зависимых от платформы и зависящих от кода факторов (процессор, тип памяти, скорость памяти, размер кода, давление в регистре, память шаблоны доступа и т. д.). Одна операция регистрового регистра, вероятно, будет намного быстрее, чем чтение незашифрованной памяти, но это не реально реалистичное сравнение. –

+0

грубо говоря, они похожи. С точки зрения многопоточности обработка становится относительно дешевой, когда вы используете больше процессоров, но кэш и память, которые являются совместно используемыми, являются более критичным ресурсом. –

ответ

3

Невозможно ответить каким-либо значимым образом. Это зависит от фактического кода и от используемой вами платформы. Как правило, если есть простые локальные оптимизации, которые могут работать, компилятор JIT сделает их за вас.

Вы лучше делать следующее:

  1. Написать программу в простом и естественном пути.
  2. Получите его работу.
  3. Запустите его на типичном наборе данных ввода/проблемы. Если это достаточно быстро, то остановитесь.
  4. Профилируйте код при его выполнении типичного набора данных ввода/вывода.
  5. Используйте профилирующие результаты для определения наиболее критической точки доступа в вашем коде.
  6. Осмотрите код и определите возможно оптимизация.
  7. Кодирование оптимизации и повторное профилирование. Улучшилось ли это?
  8. Повторяйте с шага 3 до тех пор, пока программа не будет работать достаточно быстро, или у вас не закончились возможные оптимизации.

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

3

Основной принцип настройки производительности; «Не угадать, измерить»

Смежные вопросы