В информатике 4D-вектор — это 4-компонентный векторный тип данных . Используются в качестве однородных координат для 3-мерного пространства в компьютерной графике и значений RGBA ( красный, зеленый, синий, альфа ) для растровых изображений с цветовым и альфа-каналом (как таковые они широко используются в компьютерной графике). Они также могут представлять кватернионы (полезные для вращений), хотя алгебра, которую они определяют, отличается.
Некоторые микропроцессоры имеют аппаратную поддержку 4D-векторов с инструкциями, работающими с 4- канальными инструкциями с одной инструкцией и несколькими данными ( SIMD ), обычно с 128-битным путем данных и 32-битными полями с плавающей точкой. [1]
Конкретные инструкции (например, 4-элементное скалярное произведение ) могут облегчить использование одного 128-битного регистра для представления 4D-вектора. Например, в хронологическом порядке: Hitachi SH4 , расширение PowerPC VMX128, [2] и Intel x86 SSE4. [3]
Некоторые 4-элементные векторные движки (например, векторные блоки PS2 ) пошли дальше, получив возможность транслировать компоненты как источники умножения и поддержку перекрестных произведений . [4] [5] Более ранние поколения шейдерных конвейеров графических процессоров (GPU) использовали наборы инструкций со сверхдлинными командными словами (VLIW), предназначенные для аналогичных операций.
Использование SIMD для 4D-векторов может быть удобно упаковано в библиотеку векторной математики (обычно реализуемую на C или C++ ) [6] [7] [8], обычно используемую в разработке видеоигр , наряду с поддержкой матриц 4×4 . Они отличаются от более общих библиотек линейной алгебры в других областях, фокусирующихся на матрицах произвольного размера. Такие библиотеки иногда поддерживают 3D-векторы, дополненные до 4D, или загрузку 3D-данных в 4D-регистры, с арифметикой, эффективно отображаемой на операции SIMD с помощью реализаций внутренних функций для каждой платформы . Существует выбор между подходами AOS и SOA, учитывая доступность 4-элементных регистров, по сравнению с инструкциями SIMD, которые обычно адаптированы для однородных данных.
Языки затенения для программирования графических процессоров (GPU) обычно имеют типы данных 4D (наряду с 2D, 3D) с доступом xyzw, включая permutes или swizzle , например, позволяя легко менять форматы RGBA или ARGB, получать доступ к двум 2D-векторам, упакованным в один 4D-вектор, и т. д. [9] Современные GPU с тех пор перешли на скалярные конвейеры с одной инструкцией и несколькими потоками (SIMT) (для большей эффективности в вычислениях общего назначения на графических процессорах (GPGPU)), но по-прежнему поддерживают эту модель программирования. [10]