Здравствуйте, 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.