Консультация № 11995
30.08.2004, 11:01
0.00 руб.
0 2 2
Для ускорения работы программы, написанной на Visual C++ 6.0 под Win 2000, я заменил текст С++
long lAddDiff=*piCurLef++ - *piCurRig++;
while(plCurDif<plEndDiL)
{ *plCurDif++=lAddDiff; }
ассемблерной вставкой
__asm //
{ mov eax,piCurLef
mov ebx,piCurRig
mov ecx,plCurDif
mov edx,lCount01
mov edi,[eax]
sub edi,[ebx]
add eax,4
add ebx,4
Lab00:
mov [ecx],edi
add ecx,4
dec edx
jnz Lab00
}
Вариант с ассемблерной вставкой работает медленнее. Замеры времени проводились для режима Release функцией QueryPerformanceCounter. В моей программе подобные циклы встречаются часто и работают многократно.
Можно ли в этом случае с помощью ассемблерных вставок добиться ускорения в работе программы?

Обсуждение

Неизвестный
30.08.2004, 11:01
общий
это ответ
Приветствую Вас, Sha!
С таким знанием ассемблера за оптимизацию лучше не браться. Например, с моими знаниями ассемблера, любой компилятор оптимизирует лучше... ;-)))
1) не надо загружать переменные в регистры, сразу используй адреса, т.е. первые шесть строк заменяются на две моментом.
2) А где loop? На современных процессорах он выполняется быстрее, чем связка dec/jnz, хотя это надо смотреть в описании к конкретному процессору.
В любом случае - доверься компилятору и не занимайся ерундой! ;-))<h6><b><font color=olive>* Origin : Life begins at 1000Mhz!</font></b></h6>
давно
Советник
419
1011
30.08.2004, 11:01
общий
это ответ
Приветствую Вас, Sha!
Насколько медленней? :)
<h6><font color=#FF7F00>* EMan: -=- И легко перо, да на крышу не закинешь. =-= </font></h6>
Форма ответа