DDR latency и производительность — мне сейчас очень интересна эта тема.
Есть несколько достаточно простых in-order RISC процессоров. Система занимается обработкой сетевых пакетов. Эти процессоры организую своего рода pipeline.
В результате многих оптимизаций пришли к резултату когда bolleneck СPU тратит ~1.6K тактов на пакет, 1.5 тактов на инструкцию, ~570 инструкций на пакет, ~750 тактов это pipeline stall на внешней шине.
ICache miss почти ноль (1-2 в среднем на пакет), DDR latency в зависимости от нагрузки 50-70 тактов.
Внутреннее состояние в tighly coupled memory, т.е. гарантированно очень быстро, как из обычного кеша.
Нужна еще большая производительность.
Оптимизировать код? Осталось всего 570 инструкций — буду пытаться, но шансов уже немного.
Уменьшать задержки с внешней памятью? 47% времени тратится на это. Скорее всего сюда надо смотреть.
DDR bandwidth похоже хватает с головой (жду результаты от ASIC team с тестами на FPGA), но практически уверен по косвенным данным.
Т.е. надо смотреть на DDR latency и уменьшать CPU stalls из-за этого. Процессор in-order, поэтому делать надо explicitly. Prefetch инструкций нет. Есть tightly coupled DMA, доступ к его регистрам близок, есть двухпортовая tightly coupled data memory. Пока вижу вариант делать prefetch с помощью этого DMA с целью спрятать DDR latency. Других возможностей пока не вижу.