Мне интересно, могу ли я использовать встроенные функции SIMD в коде GPU, например ядре CUDA или openCL. Это возможно?
Нет, встроенные функции SIMD — это просто крошечные обертки для кода ASM. Они зависят от процессора. Подробнее о них Вот.
Вообще говоря, зачем ты это делаешь? CUDA и OpenCL уже содержат много «функций», которые на самом деле являются «встроенными в GPU» (все они, например, математические особенности для GPU)
Вы используете векторные типы данных, встроенные в язык OpenCL C. Например, float4 или float8. Если вы используете драйверы устройств Intel или AMD, они должны быть преобразованы в инструкции SSE / AVX драйвера устройства OpenCL производителя. OpenCL включает в себя несколько функций, таких как точка (v1, v2), которые должны использовать производственные инструкции SSE / AVX. Есть ли какая-то особенность, которая вас интересует, которую вы не думаете получить из языка OpenCL C?
В основном нет, потому что языки программирования GPU используют разные модели программирования (SIMT). Тем не менее, AMD GPU имеет расширение для OpenCL который обеспечивает встроенные функции для некоторых операций байтовой гранулярности (что позволяет упаковать 4 значения в 32-битные регистры GPU). Эти операции предназначены для обработки видео.
Да, вы можете использовать встроенные функции SIMD в коде ядра на процессоре или графическом процессоре, если компилятор поддерживает использование этих встроенных функций.
Обычно лучшим способом использования SIMD будет использование типов данных Vector в ядрах, так что компилятор решит использовать SIMD в зависимости от доступности, что также делает код ядра переносимым.