Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по МПиМК / Лекция 10.doc
Скачиваний:
273
Добавлен:
15.06.2014
Размер:
272.9 Кб
Скачать

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-битные вычисления, наконец-то, могут пойти "в массы".

Соседние файлы в папке Конспект по МПиМК