|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Alex Astafiev 2:5000/228.16 05 Jan 2003 03:40:42 To : Igor Bury Subject : Анализ сигналов -------------------------------------------------------------------------------- Кэш-промахи это история вообще отдельная. Так что оставим это за кадром. Имелось в виду просто выполнение по тактам, как и приведено в документации. Если сильно не устраивает документация, то можете сами написать короткие подпрограммки на ассемблере где замер выполняется командой RDTSC в начале перед циклом и в конце. Цикл нужен для интегральной оценки и для возможности спаривать команды. В целом, да, при интегральной оценке производительность системы с double по сравнению с float/int32 упадет именно из-за возросшего обьема данных и промахов кэша. Hо у нас речь шла не о общей системной производительности, а о производительности уже выровненных закэшированных данных, с полностью загруженной очередью команд и проч. Экспоненциальные типы на Intel/AMD/Pentium реализованы очень быстро, и согласитесь, если бы integer-типы выполняли бы работу float-алгоритмов быстрее, то вернее всего было бы построить эмулятор FPU и считать все в integer. Внешняя шина данных (к динамическому ОЗУ) у pentium имеет ширину 64 бита. только у экзотических Pentium Overdrive ширина внешней шины 32бита. Видимо вы не застали время, когда появились первые pentium и (какая жалость), им требовалось ставить всенепременно ДВА модуля памяти Simm, в отличии от 486-х машин, которым хватало и одного. Модули памяти DIMM стали делать уже 64-битные. Зря вы пользуетесь GetTickCount(), которая возвращает погоду. Для измерения точных промежутков времени пригодных для измерения производительности я бы советовал вам взять на вооружение QueryPerformanceFrequency() или QueryPerformanceCounter() или напрямую пользоваться командой RDTSC, возвращающей в EDX:EAX текущий такт процессора. Полезно также знать, что экспоненциальные типы загружаясь в FP-регистры расширяются до необходимой точности и алгоритмы CPU работают с внутренним представлением. Биты 8 и 9 control word управляют точностью (PC-field) и соответственно, скоростью вычислений. Для FDIV в зависимости от состяния pc она варьируется от 19 до 39 тактов (P-I). И еще возьму на себя смелость посоветовать вот что: Судя по строке void __fastcall TForm1::Button1Click(TObject *Sender) вы пользуетесь Borland C++ Builder. Так вот, если есть желание выйграть в скорости, лучше взять на вооружение Microsoft Visual C++, Intel Optimising C++ Compiler или Open Watcom. Hа худой уж конец, GCC. В отличие от Bilder они строят нормальный быстрый код и с Double.... (Intel Compiler встроит в код prefetch-команды, и несмотря на то что в случае с double возрастает размер массивов и cache-trashing, это будет скрадено). Alex Raider/Flash inc. --- * Origin: Фидонет - сеть друзей. Будьте дружественнее! (2:5000/228.16) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/174643e17ee5e.html, оценка из 5, голосов 10
|