А как выглядит наиболее изящный алгоритм перевода цел. числа в строку?

Тема в разделе "WASM.A&O", создана пользователем Ravager, 30 июл 2008.

  1. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Протестировал инструкции fild/fbstp. Оказывается пара этих инструкций в 3 раза медленнее чем метод AMD.

    Немного измнил процедуру int2strDAO
    Код (Text):
    1. align 128
    2. proc int2strDAO Value,lpBuffer
    3.     push  ebx
    4.     push  esi
    5.     push  edi
    6.     mov   eax,[Value]
    7.     mov   edi,[lpBuffer]
    8.     cdq
    9.     mov   byte[edi],'-'
    10.     xor   eax,edx
    11.     mov   ecx,429496730
    12.     sub    eax,edx
    13.     mov   esi,esp
    14.     sub   edi,edx
    15.     push  0
    16.     align 16
    17.     @whilex:mov  ebx,eax
    18.             mul   ecx
    19.             mov   eax,edx
    20.             lea   edx,[edx*8+edx-48]
    21.             sub   ebx,eax
    22.             sub   ebx,edx
    23.             dec   esp
    24.             test  eax,eax
    25.             mov   [esp],bl
    26.     jne @whilex
    27.     movups xmm0,[esp]
    28.     mov    esp,esi
    29.     movups [edi],xmm0
    30.     pop    edi
    31.     pop    esi
    32.     pop    ebx
    33. ret
    34. endp
    По результатам тестов на Athlon X2 3800+
    int2strAMD - ~58000
    int2strDAO - ~76000

    на Atholn XP 2500+
    int2strAMD - ~70000
    int2strDAO - ~270000 (почему так?)

    Тестирую так: делаю 10 тестов по 1000 итераций и выбираю лучший результат.

    PS: т.к. процедура AMD без бранчей время её выполнения не зависит от длины числа. По тестам на X2 int2strDAO работает в 60 раз быстрее чем int2strAMD на числе длиной в 1 разряд.
     
  2. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Знакового или нет? BCD? И для какой точности?