Здравствуйте Кирпа В А, Вы писали:
КВА>Есть класс для реализации векторной алгебры
КВА>Привожу фрагмент реализации одного цикла (Release Version; Optimize — Maximize Speed)
КВА>; 498 : register int index = 0;
КВА> 00043 33 c0 xor eax, eax
КВА>$L85381:
КВА>; 499 : do
КВА>; 500 : {
КВА>; 501 : tmp.pMO[index++] *= Number;
КВА>; 502 : }
КВА>; 503 : while (index < Vector2.Dimension);
КВА> 00045 8b 4c 24 14 mov ecx, DWORD PTR _tmp$[esp+44]
КВА> 00049 40 inc eax
КВА> 0004a d9 45 0c fld DWORD PTR _Number$[ebp]
КВА> 0004d dc 4c c1 f8 fmul QWORD PTR [ecx+eax*8-8]
КВА> 00051 dd 5c c1 f8 fstp QWORD PTR [ecx+eax*8-8]
КВА> 00055 3b 46 04 cmp eax, DWORD PTR [esi+4]
КВА> 00058 7c eb jl SHORT $L85381
КВА>Почему сначала идет inc eax а затем fmul и fstp идут с -8 Ведь если inc eax перенести после fstp, то
КВА>не надо будет -8 Во первых короче на 2 байта да и быстрее наверное Не сочтите меня мелочным но
КВА>
Попробуй вместо index, работать с инкрементируемыми указателями. Кажется мне, что такой вариант кода прооптимизируется лучше.
А если действительно надо быстро и на больших объемах данных, то смотри Intel Performance Library (
http://www.intel.com/software/products/perflib/ )
-Zork