Современные процессоры активно используют технологии параллельной обработки данных, среди которых ключевую роль играют инструкции SIMD (Single Instruction Multiple Data). Эти инструкции позволяют эффективно обрабатывать несколько данных одновременно, что существенно ускоряет вычисления в различных приложениях — от мультимедийных до научных вычислений. Однако автоматическая векторизация кода на этапе компиляции сталкивается с серьезными ограничениями, зачастую из-за недостатка информации для оптимального выбора стратегий распараллеливания. В таких условиях программисты вынуждены использовать SIMD инстринсики — специальные встроенные функции, которые дают возможность явно управлять SIMD операциями из высокоуровневого языка программирования. Несмотря на преимущества, поддержка и корректность реализации этих инстринсиков в компиляторах становится источником потенциальных ошибок, что может привести к неправильным результатам, потере данных или сбоям в работе программ.
В ответ на эту проблему исследователи разработали RVISmith — инновационный рандомизированный фуззер, специально оптимизированный для генерации корректных и разнообразных тестов с использованием RVV (RISC-V Vector Extension) инстринсиков. RVV — это расширение архитектуры RISC-V, которое обеспечивает мощные средства для параллельной обработки векторных данных, и его успешная интеграция в компиляторы имеет огромное значение для экосистемы RISC-V. Главная задача RVISmith — достичь максимального покрытия различных инстринсиков, генерируя последовательности вызовов, которые отражают реальное использование возможностей RVV, при этом избегая известных неопределенных поведений, способных исказить результаты тестирования. Использование спецификации RVV инстринсиков, официально утвержденной в сообществе, позволяет создавать тесты, строго соответствующие требованиям и гарантирующие корректность. Этот подход предотвращает ложные срабатывания и повышает доверие к выявленным ошибкам.
В основе работы RVISmith лежит тщательное проектирование алгоритмов генерации кода и стратегий перестановок, которые обеспечивают разнообразие и полноту тестовых случаев. Такой дизайн дает возможность охватить более широкий спектр инстринсиков и сценариев их сочетаний, что существенно превосходит возможности существующих решений. В ходе экспериментов команда RVISmith провела тестирование трех современных компиляторов — GCC, LLVM и XuanTie, которые поддерживают RVV-инстринсики. Результаты показали, что RVISmith достигает в 11.5 раза большего покрытия инстринсиков, чем предыдущие фуззеры с открытым исходным кодом.
Для выявления багов использовался метод дифференциального тестирования: генерируемые программы компилировались разными компиляторами, с различными уровнями оптимизации и проверялись на эквивалентность результатов работы. Этот метод позволяет определить рассогласования, указывающие на потенциальные ошибки в реализации компиляторов. Благодаря этому подходу было обнаружено 13 ранее неизвестных багов. Из них 10 проблем были официально подтверждены разработчиками компиляторов, а еще 3 — успешно исправлены, что подтверждает актуальность и эффективность метода RVISmith. Безопасность программного обеспечения напрямую связана с качеством компиляторов, поскольку ошибки на этапе трансляции кода могут привести к непредсказуемому поведению приложений и даже уязвимостям.
Особое внимание уделяется обработке SIMD-инстринсиков, так как ошибки в них затрагивают критичные блоки вычислений, что особенно опасно для высоконагруженных систем и критических инфраструктур. RVISmith представляет собой пример успешного применения фуззинга в области компиляторной безопасности и качества. Его архитектура и результаты служат вдохновением для дальнейших исследований и разработок инструментов, повышающих надежность программных технологий в индустрии. Разработка RVISmith также демонстрирует важность сотрудничества между академическими исследователями и промышленными разработчиками компиляторов. Совместная работа способствует быстрому выявлению и устранению ошибок, а также развитию стандартов и спецификаций, которые делают экосистему RISC-V более зрелой и устойчивой.
В будущем можно ожидать расширения функциональности RVISmith, интеграции с другими инструментами автоматического тестирования и адаптации под новые версии спецификаций RVV, а также других аппаратных расширений. Это позволит сохранять высокий уровень качества и безопасности компиляторов, поддерживающих инновационные инструкции. Таким образом, RVISmith — это мощный инструмент для обнаружения и устранения ошибок в поддержке векторных инструкций в компиляторах RISC-V. Он способствует улучшению производительности и безопасности программного обеспечения, использующего SIMD технологии, и поддерживает развитие открытой и свободной архитектуры RISC-V, которая набирает популярность в мире. Поддержка RVV-инстринсиков становится решающим фактором успеха для платформ на базе RISC-V, а инструменты вроде RVISmith помогают гарантировать надежность всей цепочки разработки от исходного кода до выполняемых приложений.
Использование RVISmith открывает новые горизонты для исследователей, разработчиков и инженеров, работающих с низкоуровневыми оптимизациями и архитектурами параллельных вычислений.