САБЖ Есть два самопальных алгоса копирования одного буффера в другой Первый такой Код (Text): mov ecx, [BufSize] mov esi, [pBuf1] mov edi, [pBuf2] rep movsb Второй такой: Код (Text): push edx mov esi, [pBuf1] mov edi, [pBuf2] mov ecx, [BufSize] mov edx, ecx and edx, 3 shr ecx, 2 rep movsd or edx, edx jz @F mov ecx, edx rep movsb @@: pop edx Размер буффера примерно около метра 1. Даст ли второй алгос какой-то более-менее ощутимый выиграш в скорости или проще заюзать первый? 2. При каких размерах буффера примерно выигрыш по скорости станет ощущаться 3. Можно ли еще как-то ускорить алгос пересылки из одного буффера в другой?
Про это уже несколько раз говорилось -- rep movsd медленнее чем ее "разложенный" эквивалент: Код (Text): .l00p: mov eax, [esi] mov [edi], eax add esi, 0x4 add edi, 0x4 sub ecx, 0x1 jnz .l00p
Слышал звон ? На больших объемах выравненных данных rep movsd работает быстрее даже развернутого варианта простого копирования, не говоря уж о твоем сверхпростом PS: К сожалению одна хорошая давняя тема вылетела в трубу - по скорости копирования данных разными методами (memcopy by S_T_A_S_). У меня чуток переделанный вариантик memcopy сохранился - могу выложить, если кого червь сомнения грызть будет
Mika0x65 А в мануальчики давно заглядывал ? (Фог, AMD Optim, P6 Optim) Держи исходник на фасме, перед запуском желательно параметры cacheline и cachesize под свой проц поставить (на перетряску кэша влияют, иначе при повторных проходах могут заниженные результаты получиться)