C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Assembler & C++ Builder, [ code optimiZation ]
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

Вернуться в Вопросы программирования в C++Builder