Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ускорение копирования в память (memcpy)


Автор: marcusmae 3.1.2008, 21:09
Всем привет,

Встретил интересную статью по теме :

http://www.embedded.com/columns/technicalinsights/19205567?_requestid=672625

В ней рассматриваются различные модификации стандартного побитового копирования памяти с целью увеличения производительности
  •  за счёт выравнивания указателей по адресам, кратным степеням двойки и копирования не байтами, а целыми блоками различного размера
  •  за счёт работы с кэшем
  •  за счёт тонкой настройки под такты процессора и шины (отдельная ссылка на код для процессора Intel XScale)
, приводятся сравнительные диаграммы на различных частотах процессора и размерах блоков.

Статья старая, но тема, по-моему, вечно актуальная smile В целом, концепт может быть востребован не только для копирования, а вообще для оптимизации произвольных циклических вычислительных операций с массивами.

Было бы интересно узнать Ваши мнения и experience в этой сфере.

Автор: bsa 3.1.2008, 21:13
Думаю, надо оптимизировать не столько скорость выполнения memcpy, сколько количество его вызовов. Скорость его выполнения ты вряд ли сможешь универсально увеличить (очень сомневаюсь, что разработчики libc ничего не оптимизировали), а вот сократить количество вызовов - вполне.

Автор: marcusmae 3.1.2008, 21:18
Цитата(bsa @  3.1.2008,  21:13 Найти цитируемый пост)
очень сомневаюсь, что разработчики libc ничего не оптимизировали


bsa, в том-то и дело, что в самой общей постановке задачи memcpy "скопируй отсюда сюда стока-то" нечего оптимизировать. Выигрыш появляется, если предъявить определённые требования к аргументам. В статье показано, что попытка универсиализировать memcpy, например, за счёт отдельной работы с "хорошим" промежутком и "плохими" хвостами, ничего не даёт.

Автор: jonie 3.1.2008, 21:44
копирование можно делать по разному...
можно байтами; можно DWORD-ми, и добивать остатки байтами; можно юзать mmx и другие раширения CPU....

Автор: SergeCpp 3.1.2008, 21:48
Рекомендую книгу Криса Касперски — Техника оптимизации программ. Эффективное использование памяти

Там этот вопрос рассмотрен детально весьма

Автор: marcusmae 3.1.2008, 21:55
Цитата(SergeCpp @  3.1.2008,  21:48 Найти цитируемый пост)
Рекомендую книгу Криса Касперски — Техника оптимизации программ. Эффективное использование памятиТам этот вопрос рассмотрен детально весьма


SergeCpp, спасибо!

Автор: DrHex 4.9.2009, 15:47
Криса Касперски — Техника оптимизации программ - а вот материалы то старые.

В студии очень зорошо реализована данная функция.

Моно еще попробывать mmx расширение.

Автор: MAKCim 5.9.2009, 08:58
Цитата(marcusmae @  3.1.2008,  21:18 Найти цитируемый пост)
в том-то и дело, что в самой общей постановке задачи memcpy "скопируй отсюда сюда стока-то" нечего оптимизировать

ты не прав
советую посмотреть сорсы memcpy ;)
там не банальный movs

Автор: bsa 6.9.2009, 01:26
Цитата(MAKCim @ 5.9.2009,  08:58)
советую посмотреть сорсы memcpy ;)
там не банальный movs

Угу. Там есть и "выравнивание указателей", и "копирование блоками"...

Автор: Artemon 6.9.2009, 18:24
в 99,9% узкое место в алгоритме, а не в ф-ии копирования памяти.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)