реклама на сайте
подробности

 
 
> О производительности memcpy, Навеяно темой "jpeg на at91sam9g20"
aaarrr
сообщение Aug 22 2010, 04:30
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AlexandrY @ Aug 22 2010, 01:41) *
Надо будет проверить влияние этого на производительность.

Проверил интереса для. Должен сказать, что результаты вышли довольно любопытные, поэтому решил изложить их здесь.

В ходе эксперимента измерялась скорость копирования 256 блоков по одному мегабайту с различными смещениями источника и приемника данных. В качестве тестовой платформы использовался процессор EP9312 (ARM920T, FCLK = 200MHz, BCLK = 100MHz).
Первое число в квадратных скобках - смещение приемника, второе - источника, скорость приводится в мегабайтах в секунду:
Код
copy[0][0]: 60.674
copy[1][0]: 45.506
copy[2][0]: 45.506
copy[3][0]: 45.506

copy[0][1]: 46.397
copy[1][1]: 55.246
copy[2][1]: 45.506
copy[3][1]: 45.506

copy[0][2]: 46.397
copy[1][2]: 46.397
copy[2][2]: 55.245
copy[3][2]: 45.506

copy[0][3]: 46.397
copy[1][3]: 46.397
copy[2][3]: 46.397
copy[3][3]: 55.245

Примечательны два обстоятельства:
1. Относительно небольшое против ожидаемого снижение скорости при работе с неодинаковыми смещениями у источника и приемника
2. Заметное падение скорости в условиях, казалось бы близких к идеальным (n, n; при n > 0).

Объяснение первому эффекту находится достаточно просто: 60 МБайт/с - это ограничение, накладываемое производительностью контроллера памяти. И если снизить частоту ядра, оставив частоту шины на том же уровне (FCLK = BCLK = 100MHz), то разница в результатах получается более значительной:
Код
copy[0][0]: 60.672
copy[1][0]: 32.233
copy[2][0]: 32.233
copy[3][0]: 32.233

copy[0][1]: 32.233
copy[1][1]: 53.933
copy[2][1]: 32.233
copy[3][1]: 32.233
...


Второй эффект куда любопытнее. Доподлинно установить его происхождение не удалось. Можно только определенно сказать, что он не связан напрямую с работой кэша и буфера записи. Наиболее логичным представляется предположение, что смещение данных на слово ломает где-то burst-передачи, создавая тем самым некоторый оверхед. Скорее всего это особенность данного конкретного процессора и его контроллера памяти.

Зависимость скорости копирования от смещения данных, число в квадратных скобках - смещение в 32-битных словах:
Код
copy[0w]: 60.674102
copy[1w]: 55.245381
copy[2w]: 55.226639
copy[3w]: 52.582269
copy[4w]: 60.672306
copy[5w]: 55.246603
copy[6w]: 55.211088
copy[7w]: 52.584118
copy[8w]: 60.674150
...


И, наконец, последняя табличка. Она показывает скорость копирования при расположении источника и приемника данных в разных банках SDRAM.
Код
copy[0w]: 91.010796
copy[1w]: 79.629958
copy[2w]: 79.629988
copy[3w]: 73.539810
copy[4w]: 91.006777
copy[5w]: 79.630088
copy[6w]: 79.630112
copy[7w]: 73.539468
copy[8w]: 91.011220
...



Если резюмировать, то для эффективного копирования надо:
1. Выравнивать данные, причем иногда бывает мало и границы слова. Логичным представляется выравнивание по границе строки кэша.
2. По возможности располагать источник и приемник в разных банках SDRAM. Это позволит контроллеру памяти дольше держать банки открытыми (т.е. сэкономить на precharge).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aaarrr   О производительности memcpy   Aug 22 2010, 04:30
- - AlexandrY   Тут важнее каким компилером это делалось и какая ш...   Aug 22 2010, 11:58
|- - VslavX   Цитата(AlexandrY @ Aug 22 2010, 14:58) Ту...   Aug 22 2010, 12:39
|- - AlexandrY   Цитата(VslavX @ Aug 22 2010, 15:39) Я бы ...   Aug 22 2010, 13:30
|- - zltigo   QUOTE (AlexandrY @ Aug 22 2010, 15:30) Ни...   Aug 22 2010, 13:48
|- - VslavX   Цитата(AlexandrY @ Aug 22 2010, 16:30) По...   Aug 22 2010, 14:02
|- - zltigo   QUOTE (VslavX @ Aug 22 2010, 16:02) IAR F...   Aug 22 2010, 14:13
|- - VslavX   Цитата(zltigo @ Aug 22 2010, 17:13) Э,то ...   Aug 22 2010, 14:53
- - aaarrr   Цитата(VslavX @ Aug 22 2010, 16:39) aaarr...   Aug 22 2010, 15:05
|- - AlexandrY   Цитата(aaarrr @ Aug 22 2010, 18:05) Пожал...   Aug 22 2010, 15:18
|- - aaarrr   Цитата(AlexandrY @ Aug 22 2010, 19:18) По...   Aug 22 2010, 15:47
- - igorsk   RE: О производительности memcpy   Aug 22 2010, 18:47
- - sergeeff   Самый шустрый memcpy для всех случаев выравненных/...   Aug 22 2010, 19:08
|- - aaarrr   RE: О производительности memcpy   Aug 22 2010, 20:32
- - sergeeff   ЦитатаНо данные все равно лучше выравнивать. Это ...   Aug 23 2010, 06:16
|- - MrYuran   Цитата(sergeeff @ Aug 23 2010, 10:16) Это...   Aug 23 2010, 06:25
|- - AlexandrY   Цитата(sergeeff @ Aug 23 2010, 09:16) Это...   Aug 23 2010, 06:45
- - sergeeff   х86 всю свою "жизнь" аппаратно это тоже ...   Aug 23 2010, 07:13
- - AlexandrY   Цитата(sergeeff @ Aug 23 2010, 10:13) х86...   Aug 23 2010, 07:50
- - MrYuran   Цитата(AlexandrY @ Aug 23 2010, 11:50) Ес...   Aug 23 2010, 08:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 02:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016