ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
48775 Топик полностью
Ксения (19.01.2006 01:03, просмотров: 1) ответил AD на Что именно чепуха?
Ответ: Умножение типов double появилось только в SSE2. До этого SSE, как и MMX годились только для графики, где на целый пиксел можно ошибаться. Но и после этого стало не слишком лучше. Пока затолкаешь в SSE-регистры, да пока выгребешь, больше шагов потратишь, чем на FFP. Кроме того, продукт от двух double-операндов в FFP имеет большую разрядность - long double (10 байтное представление), что и позволяет в нем накапливать суммы без округления, а на SSE2 стразу получается результат, усеченный до double. А уж параллельность эту использовать и подавно замучишься. Если вы не сошласны, то приведите пожалуйста код суммирования N элементов массива типа double. Т.е. код функции double sum( double *array, int N) на ассемблере, с использованием SSE2. А потом сравним чья быстрее работает. Моя выглядит так:
              PUBLIC    sum
_sum          PROC
              push      ebp
              mov       ebp, esp
              push      ebx

              mov       ebx, [ebp+8]        ;array
              mov       ecx, [ebp+12d]      ;N

              fldz
              jecxz     short bypass
cycle:        fadd      qword ptr [ebx]
              add       ebx, 8
              loop      cycle
bypass:
              pop       ebx
              pop       ebp
              ret
_sum          ENDP
Собственно в самом цикле всего 3 строчки:
cycle: fadd      qword ptr [ebx]
       add       ebx, 8
       loop      cycle