Ранг: 47.1 (посетитель), 2thx Активность: 0.03↘0 Статус: Участник
Создано: 15 февраля 2010 19:08 · Поправил: Vol4ok · Личное сообщение · #1
Протестируйте на предмет самой быстрой реализации memcpy -
В нем содержится множество различных реализаций memcpy начиная от SSE заканчивая простым циклом. Заодно это отличный способ оценить скорость работы с памятью на компе.
Результаты кидайте сюда, вместе с процом на котором тестировали.
Мои результаты для Core2Duo 2.26
Code:
buffer size =16777216 Bytes
number of copy operation =16
preparing...
start!
// MMX реализация на асме с prefetch
mmx_memcpy_asm:
ttl:0.114444 s
avr:0.007153 s
spd:2237 mb/s
// MMX реализация на intrinsic инструкциях c prefetch
mmx_memcpy:
ttl:0.115609 s
avr:0.007226 s
spd:2214 mb/s
// очень хитрая на MMX под AMD c prefetch
memcpy_huge:
ttl:0.111493 s
avr:0.006968 s
spd:2296 mb/s
//реализация на SSE
sse_memcpy_asm:
ttl:0.177681 s
avr:0.011105 s
spd:1441 mb/s
//реализация на SSE c prefetch
sse_memcpy_asm2:
ttl:0.143008 s
avr:0.008938 s
spd:1790 mb/s
//реализация на SSE на intrinsic инструкциях
sse_memcpy:
ttl:0.183768 s
avr:0.011486 s
spd:1393 mb/s
//реализация на SSE на intrinsic инструкциях без выравнивания
sse_memcpy_u:
ttl:0.189657 s
avr:0.011854 s
spd:1350 mb/s
//цикл repmovsd
movsd:
ttl:0.181586 s
avr:0.011349 s
spd:1410 mb/s
//ntdll RtlCopyMemory
RtlCopyMemory:
ttl:0.200333 s
avr:0.012521 s
spd:1278 mb/s
//crt memcpy_s
memcpy_s:
ttl:0.207848 s
avr:0.012990 s
spd:1232 mb/s
//цикл for c копированием по 4B
for loop(dword):
ttl:0.204562 s
avr:0.012785 s
spd:1251 mb/s
//цикл while c копированием по 4B
whileloop(dword):
ttl:0.197684 s
avr:0.012355 s
spd:1295 mb/s
//цикл while c копированием по 1B
for loop(byte):
ttl:0.276843 s
avr:0.017303 s
spd:925 mb/s
ЗЫ: если есть еще идеи для реализации быстрой memcpy, то кидайте сюда, если это будет актуально то включу в бэнчмэк.
Clerk пишет: rep movsd самый быстрый Это отнюдь не так. Копирование через mmx/sse с записью мимо кэша работает существенно быстрее на больших выравненных на 16 блоках памяти.
Ранг: 237.0 (наставник), 20thx Активность: 0.13↘0 Статус: Участник sysenter
Создано: 15 февраля 2010 22:46 · Поправил: HiEndsoft · Личное сообщение · #17
Проще выложить было относительный тест ф-ций.Ибо тут важна не производительность как таковая, а какую функу на каком проце при каком выравнивании и размере блока использовать рациональнее. for loop, while loop - ни к чему. Чего компами в топике про программирование меряться, если тут не исходников ни полезного кода?!!? В аттаче - графический тест именно различий.
Ранг: 199.6 (ветеран), 12thx Активность: 0.1↘0 Статус: Участник www.uinc.ru
Создано: 16 февраля 2010 03:46 · Поправил: DrGolova · Личное сообщение · #23
Слишком короткий тест. Нужно минут на 5 чтобы влияние торентов и прочего хлама свести к минимуму. А то почти все результаты тянут на книгу гинесса (ку!)
Ога, i5/i7 выходят одинаковыми если множить на чистоту. Но i5 выигрывают по tdp и по цене. так и з0пишем. Кстати никому не нужен старенький c2d со всеми наворотами за 300 евриков с самовывозом?
На сколько я понял, второй тест измеряет время при помощи rdtsc - что менее точно чем QueryPerfomanceCounter, изза этого результаты различаются, но тенденция остается таже.