Я проектирую систему реального времени, которая иногда должна дублировать большой объем памяти. Память состоит из не крошечных областей, поэтому я ожидаю, что производительность копирования будет достаточно близка к максимальной пропускной способности, которую могут выполнять соответствующие компоненты (ЦП, ОЗУ, МБ). Это заставило меня задуматься о том, какую сырую пропускную способность памяти может использовать современная сырьевая машина?
Мой стареющий Core2Duo дает мне 1,5 ГБ / с, если я использую 1 поток до memcpy()
(и, понятно, меньше, если я memcpy()
с обоими ядрами одновременно). Хотя 1,5 ГБ - достаточный объем данных, в режиме реального времени Приложение, над которым я работаю, будет иметь примерно 1/50 секунды, что означает 30 МБ. В основном почти ничего. И, возможно, хуже всего, когда я добавляю несколько ядер, я могу обрабатывать намного больше данных без какой-либо повышенной производительности для необходимого шага дублирования.
Но в наши дни бюджетный Core2Due не совсем популярный. Существуют ли сайты с информацией, такой как фактические тесты, о необработанной пропускной способности памяти на текущем и ближайшем оборудовании?
Кроме того, для дублирования больших объемов данных в памяти, есть ли какие-либо ярлыки, или memcpy()
настолько хорош, насколько это возможно?
Учитывая кучу ядер, которым нечего делать, кроме как дублировать как можно больше памяти за короткое время, что я могу сделать лучше всего?
РЕДАКТИРОВАТЬ: Я все еще ищу хорошую информацию о производительности копирования памяти. Я только что запустил мой старый memcpy()
тест. Та же машина и настройки, теперь выдает 2,5 ГБ / с ...