![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Асм рулит? [D5, Win2k]
debuger © (2004-09-30 17:45:00)Доброго времени суток.
Вопрос такой: рулят ли(по скорости канешна) асмовые вставки.
Если предидущий ответ положителен, дайте линки на доку по написанию таковых. Произвожу только вычисления(что-то на ковго-то умножить, отнять, усреднить), т.е. проэкт мой чисто вычислительного характера.
Defunct (2004-10-04 19:02:00) [1]debuger © (04.10.04 18:49) [40]
потому что это просто пропуски. зачем там NOP'ы, если все равно эти команды никогда не исполняются.
вот пример:
db ??
db ??
db ??
Proc_Entry_Point:
< код процедуры >
Какая разница что будет на месте ??, если мы все равно начинаем выполнять код с Proc_Entry_Point
debuger (2004-10-04 18:49:00) [2]а почему тогда не nop'ы?
GuAV (2004-10-03 23:29:00) [3]Это тупо нули. Заполнение места. Чтобы процедуры были по смещению кратному 4.
Рыба (2004-10-03 22:46:00) [4]Кто-нибудь скажет зачем в генерируемом коде много идущих друг за другом строк:
add [eax], al
GuAV (2004-10-03 22:04:00) [5]
> там ускорение в разы..
..однако Sha привел процедуру без асм, котороя тоже дала ускорение в разы.
довольно часто изменение алгоритма даёт больше ускорение чем переписывание на асм.
jack128 (2004-10-03 21:49:00) [6]DSA © (01.10.04 12:05) [31]
Штатный оптимзатор кода работает достаточно хорошо. Можно неделю кодить и обнаружить, что получаещь увелечение скорости 3-5%.
смотри ветку, ссылку на которую дал GuAV. там ускорение в разы..
debuger (2004-10-03 17:04:00) [7]У меня распознавание видеопотока в риальном времени.
Тромозили две вещи:
- съем данных
- паганая рекусрия, которую быстро не опишешь.
Переписал первое, к скорости прибыло 3х.
Второе, особо сильно пока не прилизывается.
Все пасибо. Асма пока не хочу :)
Рыба (2004-10-02 21:15:00) [8]> GuAV © (02.10.04 21:11) [33]
ОК.
GuAV (2004-10-02 21:11:00) [9]Рыба © (02.10.04 21:06) [32]
Управлением Coprocessor Control Word можно понизить точность FPU. Однако не советую.
Приведенную функцию переписывать не нужно.
Рыба (2004-10-02 21:06:00) [10]Интересно, можно ли ускорить стандартную функцию Round?
from System.pas
procedure _ROUND;
asm
{ -> FST(0) Extended argument }
{ <- EDX:EAX Result }
SUB ESP,8
FISTP qword ptr [ESP]
FWAIT
POP EAX
POP EDX
end;
К примеру, сделать специально для типа Double?
DSA (2004-10-01 12:05:00) [11]Имею опыт написания асемблерных вставок. Результат:
1 Ассемблерные вставки сильно скорость не подымают. Штатный оптимзатор кода работает достаточно хорошо. Можно неделю кодить и обнаружить, что получаещь увелечение скорости 3-5%.
2 Много с этими вставками бился - пришел к выводу: попутки "вылизать" код - безполезная трата времени (убиваеться многог времени а реальный приост - единицы, реже десятки процентов). Единственный путь - глобальная оптимизация алгоритма с "ранним" отсечением тупиковых ветвей для просчета.
3 единственный путь оптимизации за счёт асм. вставок - использование ММХ и SSE инструкций с оптимизацией под конкретный процессор (заточка кода под особенности конвеера команд процессора). В этом случае возможно получить реальный результат.
Defunct (2004-10-01 11:19:00) [12]> Вопрос такой: рулят ли(по скорости канешна) асмовые вставки.
> Произвожу только вычисления(что-то на ковго-то умножить, отнять, усреднить), т.е. проэкт мой чисто вычислительного характера.
Ты работает с видео?
Если да, тогда тебе прямой путь с использованию SSE2
есть команды параллельного умножения и сложения сразу нескольких (4-х операдов с плавающей запятой).
> Если предидущий ответ положителен, дайте линки на доку по написанию таковых.
www.intel.com
Instruction Set Reference vol 2A-B.
Programming Guige vol 3
2 debuger: напиши здесь код какой-нить простенькой функции, которую ты наиболее часто используешь.
Erik1 (2004-10-01 11:10:00) [13]Возможно дела не в самом алгоритме как таковом, а в вмособе его применения. Например как там выделяется память, что используется в качестве буфера, как передаются параметры, имеется ли рекурсия и пр... Все это относится не к матиматике алгоритма, а имено к програмированию. Вот это вам и могут здесь подсказать, к томуже небывает идеальных алгоритмов!
Sens (2004-10-01 10:45:00) [14]to debuger
А может опишешь задачу, которую пытаешься решить?
Как-то мне не понятно, какая такая задача может тормозить на 1,5Г???
У меня был неописуемый случай, когда сам свою прогу оптимизировал по скорости работы в ... очень много раз (скажу что в 1000-чи, не поверят). А задача была - разобрать log файл сквида и запихать его в базу (Access) для дальнейшей обработки.
~650000 строк сейчас обрабатывается на cel 1800 ~25сек (разбор строк, занесение в базу и предварительная обработка запросов), до этого было около 4-х часов. (АСМ не использовал).
Так что нужно с алгоритмом разобраться, а потом только думать об асме.
С уважением.
Amoeba (2004-10-01 10:23:00) [15]Если очень нужно, то материалы по asm'у на русском найдешь на сайте А.Подгорецкого
GuAV (2004-09-30 23:05:00) [16]Alekc (30.09.04 22:57) [25]
Он оптимизирует достаточно хорошо в большинстве реальных ситуации. Всё же это не искуственный интеллект.
Он действует по шаблонам.
Например есть известный случай, такое часто бывает:
mov ebx, eax
mov eax, ebx
Alekc (2004-09-30 22:57:00) [17]Кстати, по поводу оптимизатора ЯВУ... напишите в дельфи несколько строчек "<variable> := 0;" и посмотрите на код после компиляции... если он на простейшем примере столько лишнего лепит, то что же будет на сложных циклах ?...
debuger (2004-09-30 22:12:00) [18]%)
GuAV (2004-09-30 21:49:00) [19]Никита © (30.09.04 21:31) [22]
да. именно к такому выводу и приводят ветки про биты и про поиск.
Никита (2004-09-30 21:31:00) [20]Можно оптимизировать любой код до максимального быстродействия.
А можно и асм вставку написать так чтоьы все грузилось полчаса.