2014-12-01 1 views
0

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

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

Мое непосредственное размышление - нет. "value = otherValue" и "if (value == otherValue)" Я ожидал бы, что потребуется такое же количество мощности для обработки, поскольку они оба состоят из одной операции. Я мог ошибаться. Кто-нибудь знает ответ?

+1

Вы пробовали профилировать оба варианта? –

+0

Как вы делаете это как в одиночной операции? первая - это одиночная операция (значение mv1, значение2), но if is (cmp value1, value2/je равно). Если if не может рассматриваться как простое выражение выражения, это также скачок (или прыжки), который он влечет за собой. – 537mfb

+0

Тег обработки должен использоваться только для языка обработки, поскольку общий тег обработки будет довольно бессмысленным. –

ответ

0

Я не уверен, но я думаю, что аппаратная архитектура имеет важное значение здесь также (что процессор работает здесь)

«If» версия требует, чтобы расшириться после того, если по результатам. (большинство процессоров сегодня используют предсказание ветвления), но в первом варианте это одна операция, а в версии «если» вы сравниваете (предположим, что это одна операция - вам нужно извлечь оба vars для регистрации и cmp их, а затем, если они разные вам нужно установить и сохранить).

Так что в среднем метод «если» должен стоить БОЛЬШЕ.

Один из способов найти правильный ответ - проверить его на несколько миллионов различных переменных и значений и сравнить результаты.

+0

Обратите также внимание на то, что узким местом в любом случае может быть полоса пропускания памяти. –

+0

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

+0

value = othervalue is just сохраняя значение в памяти - одна операция mv, если значение для хранения не перейдет в число ограниченных процессоров (сохранение 64-битного значения с использованием 32-битного процессора займет 2 mv-операций - или больше, если оно проведет любую проверку ошибок). Если на другой стороне всегда будет по крайней мере две операции - cmp и прыжок (je, jne, jgt, jlt, jge, jle). Учитывая это, если нет какой-либо оптимизации if-оператора, о которой я не знаю, if бы весил больше на процессоре - не говоря уже о времени перехода на память (переход на новое место в коде) – 537mfb

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