Re[17]: Школа С++ от UNIGINE
От: Stanislav V. Zudin Россия  
Дата: 10.03.17 20:46
Оценка:
Здравствуйте, AlexGin, Вы писали:

SVZ>>У меня результаты получились не столь оптимистичные.

AG>Это ещё зависит от компьютера — здесь (на работе) у меня комп куда более мощный, чем старенький домашний.

i7-4790K CPU @ 4.00GHz не самый медленный, однако...

SVZ>>N_MULTIPLY пришлось уменьшить на два порядка (=100000).

AG>Да, если исользовать вызов QueryPerformanceFrequency то может и логично.

Просто при исходном значении результата было не дождаться.

SVZ>>VS2013, x386

SVZ>>Trigonometry: 2568.560003 msec // Очень большие цифры по тригонометрии!!!


AG>За счёт чего так долго считает тригонометрию?

AG>Обычно отличия от данных double для тригонометрии примерно в 2...3 раза.
AG>Может там DEBUG версия?

Не, везде релизные версии, но код генерится сильно разный.

Вот фрагменты с вычислением синуса:
VS2008 x386

; 135  :             double dbMult = (double)(i * 2 * M_PI);
; 136  :             resultDbl = randDbl[j] + sin(dbMult);

    fild    DWORD PTR tv243[esp+60]
    fmul    QWORD PTR __real@400921fb54442d18
    call    __CIsin
    fstp    QWORD PTR tv252[esp+60]
    movsd    xmm0, QWORD PTR tv252[esp+60]
    movsd    xmm1, QWORD PTR __real@3fd8000000000000
    xor    eax, eax
$LL3@nativeComp:
    movsd    xmm2, QWORD PTR ?randDbl@@3PANA[eax]
    addsd    xmm2, xmm0

; 137  :             resultDbl += 0.375;

    addsd    xmm2, xmm1

; 138  :             outpDbl[j] = resultDbl;

    movsd    QWORD PTR ?outpDbl@@3PANA[eax], xmm2



VS2013 x386
; 135  :             double dbMult = (double)(i * 2 * M_PI);

    movd    xmm0, edi
    cvtdq2pd xmm0, xmm0
    mulsd    xmm0, QWORD PTR __real@400921fb54442d18

; 136  :             resultDbl = randDbl[j] + sin(dbMult);

    call    __libm_sse2_sin_precise
    addsd    xmm0, QWORD PTR ?randDbl@@3PANA[esi]
    add    edi, 2

; 137  :             resultDbl += 0.375;

    addsd    xmm0, QWORD PTR __real@3fd8000000000000

; 138  :             outpDbl[j] = resultDbl;

    movsd    QWORD PTR ?outpDbl@@3PANA[esi], xmm0



VS2013 x64

    cmp    ebp, 2
    jle    SHORT $LN5@nativeComp
    movsdx    xmm6, QWORD PTR ?randDbl@@3PANA[rdi+r14]
    mov    ebx, 4
    lea    esi, DWORD PTR [rbp-2]
    npad    5
$LL3@nativeComp:

; 141  :         {
; 142  :             double dbMult = (double)(i * 2 * M_PI);

    movd    xmm0, ebx
    cvtdq2pd xmm0, xmm0
    mulsd    xmm0, xmm7

; 143  :             resultDbl = randDbl[j] + sin(dbMult);

    call    sin
    add    ebx, 2
    addsd    xmm0, xmm6

; 144  :             resultDbl += 0.375;

    addsd    xmm0, xmm8
    dec    rsi
    jne    SHORT $LL3@nativeComp
    movsdx    QWORD PTR ?outpDbl@@3PANA[rdi+r14], xmm0


Машина с 2017 Студией сейчас недоступна, не могу показать листинг, но думаю, что там не сильно большие отличия от 2013.
_____________________
С уважением,
Stanislav V. Zudin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.