- •Тема 10 Современное развитие микропроцессорной техники
- •1. Архитектуры risc, cisc, vliw, misc, epic
- •1.1. АрхитектураRisc
- •1.2. Архитектура cisc
- •1.3. Архитектура misc
- •1.4. Архитектура vliw
- •1.5. Архитектура epic
- •2. Архитектура risc-микропроцессоров 3-го поколения
- •2.1. Структура процессоров Alpha: 21064, 21264
- •2.2. Сравнительные характеристики Alpha 21164 и 21264
- •2.3. Процессоры pa-risc компании Hewlett-Packard
- •2.4. Области применения risc-процессоров
- •3. Архитектура ia-64. Мп Intel® Itanium® 2
- •4. Архитектура amd-64. Мп amd® Athlon® 64
- •4.1. Регистры
- •4.2. Адресация
- •4.3. Вычисления
- •4.4. Совместимость
- •5. Архитектура e2k. Мп Эльбрус-2000
4.3. Вычисления
Операции над 64-битными числами ведутся в криптографических системах, в научных и финансовых задачах. Например, алгоритмы шифрации SSL используют 64-битное целочисленное умножение. Добиться этого одной инструкцией на 32-битной машине невозможно, а 64-битная архитектура иногда позволяет обойтись одной командой, как следствие - колоссальное снижение нагрузки вычислительных блоков процессора и размера кода (примерно в 10 раз). Наличие 64-битных регистров может ускорить алгоритмы побитовой обработки данных, например, кодирование Хаффмана, применяемое в MPEG-сжатии. Рассмотрим несколько примеров.
64-битное сложение в x86: |
00000000 03 C3 add eax, ebx |
00000002 13 D1 adc edx, ecx |
64-битное сложение в AMD64: |
00000000 48 03 C3 add rax, rbx |
Второй вариант короче на один байт, хотя и требует дополнительного префикса (48h). К тому же он не стирает содержимое регистров ECX, EDX и гарантированно выполняется за 1 такт процессора.
Функция 64-битного умножения в x86: |
x86_mul_64x64 proc near |
push ebp |
mov ebp, esp |
push ebx |
push esi |
push edi |
mov esi,[ebp+8] |
mov edi,[ebp+12] |
mov ecx,[ebp+16] |
push ebp |
mov [tempESP], esp |
mov eax,[esi] |
mov edx,[edi] |
mul edx |
mov ebx,edx |
mov [ecx],eax |
xor esp,esp |
xor ebp,ebp |
mov eax,[esi+4] |
mov edx,[edi] |
mul edx |
add ebx,eax |
adc ebp,edx |
adc esp,0 |
mov eax,[esi] |
mov edx,[edx+4] |
mul edx |
add ebx,eax |
adc ebp,edx |
adc esp,0 |
mov [ecx+4],ebx |
mov eax,[esi+4] |
mov edx,[edi+4] |
mul edx |
add ebp,eax |
adc esp,edx |
mov [ecx+8],ebp |
mov [ecx+12],esp |
mov esp, [tempESP] |
pop ebp |
pop edi |
pop esi |
pop ebx |
mov esp, ebp |
pop ebp |
ret |
x86_mul_64x64 endp |
Функция 64-битного умножения в AMD64: |
amd64_mul_64x64 proc near |
mov rax, [rcx] |
mul [rdx] |
mov [r8], rax |
mov [r8+8], rdx |
ret |
amd64_mul_64x64 endp |
Во втором варианте инструкций меньше в 9 раз! В пределе можно обойтись и вовсе одной командой mul r64, если, например, необходимые данные уже содержаться в регистрах процессора. При делении разница будет еще больше: для x86 придется писать функцию длиной в 60-80 ассемблерных строк (я не буду ее приводить, но поверьте мне на слово), а для AMD64 размер останется тем же. Кроме того, для AMD64 опять можно обойтись одной командой div r64.
Кстати, 64 бита - не предел. Бывают и большие числа. Операции над ними могут потребоваться при моделировании ядерных взрывов, исследовании генома человека, к тому же они представляют чисто научный интерес. По данным AMD, для умножения двух 1024-битных чисел нужны следующие действия:
|
32-бита |
64-бита |
Число сложений |
255 |
63 |
Число сложений с переносом |
509 |
125 |
Число умножений |
256 |
64 |
Итого |
1020 инструкций |
252 инструкции |
Очевидно четырехкратное преимущество последних. Кстати Athlon 64 выполняет сложение и вычитание 64-битных чисел также быстро, как и 32-битных, а задержка при чтении их из памяти лишь немногим выше чем у 32-битных и с лихвой компенсируется меньшим размером кода.
До недавнего времени, поддержка 64-битной математики была только в высокопроизводительных серверах и дорогих рабочих станциях. Стоимость таких серверов на базе RISC-процессоров начиналась где-то с отметки в $25.000, а систем на базе Intel IA-64 от $10.000. Вот почему 64-битные сервера до сих пор составляли не более 5% всех серверов проданных на рынке. С приходом AMD64 ситуация может измениться - новые процессоры гораздо дешевле, но что еще важнее, они используют стандартные корпуса и комплектующие. Иначе говоря, с приходом Athlon 64/FX и Opteron 64-битные вычисления, наконец-то, могут пойти "в массы".