2012-05-10 3 views
0

Рассмотрим следующие два центрального процессора операции:Являются ли эти операции с процессором одинаковыми?

сумма = 1 + 1 + 1 + 1 + 1 + 1 + 1 + ...... п раз

и сумма = 1 * п

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

+0

Я предполагаю, что компилятор сделает свои оптимизации, и они займут одинаковое время. –

+0

Не все процессоры идентичны. –

ответ

0

ADD и MUL - разные операции.

В первом утверждении у вас есть операции N ADD -> много cicles.

Во втором случае у вас есть одна операция -> несколько циклов.

Однако, это зависит от компилятора, как будут выполняться эти утверждения. (Возможно, что компилятор заменит 1 + 1 + 1 + ... + 1 с N во время компиляции, поэтому исполняемый файл будет выполняться в одной операции. Но в этом случае компилятор выполнит N операций.)

ОБНОВЛЕНИЕ: Там существует MUL операции: http://en.wikipedia.org/wiki/X86_instruction_listings

+0

Но в процессоре операции умножения нет, только сложение и вычитание. –

+0

Есть инструкции по умножению (в x86/x64), я считаю, что, как правило, нет разделенных. – helloworld922

+0

Но я думаю, что эти операции умножения не могут быть атомарными –

0

на x86, ADD немного меньше, чем один цикл занимает от агрегата для выполнения, MUL занимает примерно 2,7 циклов.

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

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

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