tgoop.com/cpu_design/302
Last Update:
Сегодня принес вам интересное руководство по оптимизации работы с software - RISC-V Optimization Guide.
RISC-V Optimization Guide — это руководство, созданное проектом RISE Project для предоставления разработчикам программного обеспечения конкретных рекомендаций по оптимизации кода для процессоров на архитектуре RISC-V.
Содержимое гайда:
1) Общие рекомендации: использование регистров, работа с памятью и кешами.
2) Особенности расширений RISC-V: RVV (векторные инструкции), RVF, RVD и другие расширения.
3) Советы по LMUL: как выбирать LMUL в зависимости от типа ядра (In-Order vs Out-of-Order).
4) Переносимость: советы по созданию переносимого и масштабируемого кода.
Гайд будет особенно полезен в контексте последней темы, поднятой Krste Asanovic, о ключевой идее LMUL в векторной спецификации RISC-V. Основная мысль Krste заключается в необходимости аппаратной поддержки механизма определения оптимального LMUL в зависимости от фактической длины вектора (vl).
The intention in the RVV ISA design was that execution occupancy would be proportional to active vl as required by the application, not VLMAX set by LMUL.позволит избежать ситуации, когда векторные инструкции выполняются над несуществующими (неиспользуемыми) элементами, повышая общую эффективность и производительность.
So, even if LMUL was large, but vl was small, the occupancy of the vector instruction should be low. In other words,
larger LMUL should not cause worse performance with the same vl.
Это
Однако, поскольку на сегодняшний день не все компании реализуют эту аппаратную логику в своих чипах, программистам приходится учитывать особенности конкретного аппаратного обеспечения. Это усложняет процесс разработки ПО и делает код менее портируемым и аппаратно-независимым.
Например, в руководстве (RISE Optimization Guide) явно указано следующее:
If all operations involved are linear in LMUL, choose EMUL to balance register pressure and frontend bandwidth. Depending on the processor implementation, this is going to mean either very high LMUL or very low LMUL, but not both. For example, on Out-of-Order machines, it’s generally better to have very low LMUL, resulting in lower register pressure at the expense of more instructions being issued. While on In-Order machines, it’s generally better to have very high LMUL, favoring lower instruction count at the expense of higher register pressure.
В данный момент в сообществе существует условно два подхода к использованию LMUL:
Авторы спецификации RVV (например, Krste Asanovic) ориентированы на долгосрочную перспективу, в которой наибольшая эффективность достигается за счёт модели исполнения инструкций, зависящей от реальной длины вектора (vl-dependent). Такой подход позволяет эффективно использовать высокий LMUL там, где это оправдано.
Однако наиболее просто и естественно эта модель реализуется в широких in-order VPU с большой длиной вектора (большим VLEN), в то время как для коротких OoO-векторных ядер с небольшим VLEN (128–512 бит) реализация такой логики существенно более сложна и менее практична.
Практические реализации и существующие рекомендации (например, RISE Optimization Guide) делают акцент на текущих технических ограничениях и сложности реализации LMUL в высокопроизводительных процессорах с внеочередным выполнением инструкций (Out-of-Order). В таких реализациях предпочтительным считается использование низкого LMUL (LMUL=1).
Таким образом, сейчас между долгосрочной стратегией стандарта и практическими реализациями имеется явное расхождение. Можно ожидать постепенного сближения этих подходов, если высокопроизводительные OoO-ядра смогут преодолеть аппаратные сложности реализации и приблизиться к модели, заложенной в стандарт RVV.
BY Записки CPU designer'a
Share with your friend now:
tgoop.com/cpu_design/302
