Vasek Pupkin’s Home Page

Пожалуй самый лучший софт в мире можно найти именно тут и это не пустые слова…

НачалоНовостиПродукцияКонтактыГостевая книга

 

MMX, 3DNow!, SSE и все, все, все…

(Я не являюсь профессионалом в этой области, тут описано моё личное мнение. Строго не судите.)

 

Вообще-то, я в интернете много читал про эти технологии, про их достоинства и недостатки. Это вполне естественно, так как они существуют уже давно. Ну и начнем с истории:

 

MMX

Самая первая SIMD технология, внедренная Intel’ом в далеких 90-ых. В своё время сделала мощный прорыв в компьютерной индустрии. Без особых затрат (для ее работы использовался сопроцессор) была получена возможность производить операции над 64-разрядами за один такт. Эта технология работает только с целыми числами и поэтому важнейшим ее недостатком является то, что может работать либо MMX команда, либо команда с плавающей точкой (т.к. за работу с вещественными числами отвечает сопроцессор и он же отвечает за MMX). И поэтому нужно использовать команду переключения.

 

3DNow!

Как сказали многие: «Рекламный трюк!» или «Ответный удар АМД». Итак, что мы видим. Эта технология является логическим продолжением MMX’а. Т.е. те же 64 бита, только добавлена поддержка чисел с плавающей точкой. Когда я взглянул в описание инструкций, то был просто в ужасе. Во-первых, что-нибудь типа mm(dest)[63:32] = mm/m64(src)[31:0] + mm/m64(src)[63:32] выглядит несколько пугающе и непонятно зачем оно вообще нужно, когда можно сделать проще. Во-вторых, я не нашел деления!!! Конечно извините, но без деления никуда… а так по жизни вполне достаточно команд MMX’а.

 

SSE

Не помню что появилось раньше, но скорее всего ССЕ, как ответ на 3DNow!. Новая технология, новые регистры. Теперь поддержка 128 разрядов. В наличии все логические функции, а также все арифметические действия и даже деление(правда 32-ух разрядных вещественных чисел)!!!

 

Enhanced 3DNow!

Ну как говорится «Зуб за зуб». Правда… все те же регистры MMX, все те же 64 разряда, опять нет деления чисел с плавающей точкой. Зато понадобавлялась целая куча бесполезных команд, в смысл которых вникнуть стало еще труднее: mm(dest)[15:0] = abs(mm(dest)[7:0] - mm/m64(src)[7:0]) + abs(mm(dest)[15:8] - mm/m64(src)[15:8]) + abs(mm(dest)[23:16] - mm/m64(src)[23:16]) + abs(mm(dest)[31:24] - mm/m64(src)[31:24]) + abs(mm(dest)[39:32] - mm/m64(src)[39:32]) + abs(mm(dest)[47:40] - mm/m64(src)[47:40]) + abs(mm(dest)[55:48] - mm/m64(src)[55:48]) + abs(mm(dest)[63:56] - mm/m64(src)[63:56])

И опять работает сопроцессор :)

 

SSE2

Вышел новый процессор… ну и в качестве рекламы был расширен ССЕ до ССЕ2. Новые инструкции и ничего более(хотя полезные и во многих случаях более быстрые: пересылка сразу 128 бит как пример… только данные в памяти должны быть выравнены на 16).

 

***

Используя программу CPU Technology Test мной были получены результаты повергшие меня в ужас: ни одна SIMD технология не давала значительного преимущества при вычислении простейшего дискретного выражения. После чего я усомнился в необходимости этих технологий и решил усложнить задачу – сделал тест для решения арифметического выражения с двумя делениями и одним умножением. И о чудо!!! Скорость выполнения с использованием SSE2 была почти в 4 раза выше.

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

Еще хотелось бы отметить тот факт, что процессоры от Intel очень медленно производят арифметические операции (деление и умножение). В этом случае поможет SSE2.

 

Сравнение процессоров Intel и AMD

 

На главную

Hosted by uCoz