dEEp |
Отправлено: 18.06.2005, 13:40 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 69
|
Давно я не появлялся...
Есть код на asm'e, вычияющий a+b=c:
CODE |
int a=4;
int b=6;
asm
{
mov eax, a
mov ebx, b
add eax, ebx
}
|
Значение "c", будет находиться в "eax".
Вопрос. Каким образом можно это например вывести в Edit1->Text. Т.е. нужно чтобы в строке появился ответ 10.
Пробовал писать Edit1->Text=eax; естесственно не работает. еах — не определено.
Всё это нужно для оптимизации кода. Программы должны быть наполнены (как я считаю) ассемблерскими вставками.
Вспомните например, что время выполнения операции деления 6 раз превышает время выполнения сложения/вычитания.
Да, понимаю, нужно заменять такой код:
CODE |
double a, b, c, e, f;
e = a/c;
f = b/c;
|
на такой:
CODE |
double a, b, c, e, f, t;
t = 1/c;
e = a*t;
f = b*t;
|
Но со вставками будет ещё быстрее. А размер файла уменьшится соответственно тоже.
Помогите...
|
|
esh |
Отправлено: 18.06.2005, 16:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
CODE | int a=4;
int b=6;
int c; //result
asm
{
mov eax, a
add eax, b
mov c,eax
}
Edit1->Text=c; |
Только прироста производительности это не даст, слишком простые операции. Поставь брэкпоинт, запусти, потом View->Debug windows->CPU, сам поймешь
Отредактировано Георгий — 18/06/2005, 22:23 |
|
Георгий |
Отправлено: 18.06.2005, 18:09 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
в арифметике, на ещё с базовыми типами данных, с современными трансляторами не стоит соревноваться. выигрыш если и будет, то составит порядка 10% а затраты времени на написание кода и его поддержку около 1000%
Отредактировано Георгий — 18/06/2005, 19:10 |
|
esh |
Отправлено: 18.06.2005, 19:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Я о том же, на его примере пробовал (в переделанном виде). Код получается просто идентичный |
|
dEEp |
Отправлено: 18.06.2005, 20:31 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 69
|
Ну а если заменять деление ассемблеровскими вставками?
Есть другие предложения с оптимизацией?
|
|
Георгий |
Отправлено: 18.06.2005, 21:13 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
да, есть — оптимизировать алгоритм. уменьшать в нём число операций. и, наконец, перейти от абстрактной оптимизации к оптимизации чего то вполне конкретного.
а в примере с умножениями — написать побольше модификаторов const они сильно помогают оптимизирующему компилятору
и ещё: Asher пару лет назад давал ссылку вот на такой документ
http://www.phatcode.net/res/263/files/pentopt.pdf
а я в свою очередь советую прочесть книгу "Жемчужны программирования" (Pearls of programming) в ней очень наглядно показываются преимущества комплексного подхода к проблеме
Отредактировано Георгий — 18/06/2005, 22:31 |
|