5 ответов:
многие процессоры имеют наборы команд" vector "или" SIMD", которые одновременно применяют одну и ту же операцию к двум, четырем или более фрагментам данных. Современные чипы x86 имеют инструкции SSE, многие чипы PPC имеют инструкции "Altivec", и даже некоторые чипы ARM имеют набор векторных команд, называемый NEON.
"векторизация" (упрощенная) - это процесс перезаписи цикла таким образом, что вместо обработки одного элемента массива N раз он обрабатывает (скажем) 4 элемента массива одновременно N / 4 раза.
(Я выбрал 4, потому что это то, что современное оборудование, скорее всего, напрямую поддерживает; термин "векторизация" также используется для описания преобразования программного обеспечения более высокого уровня, где вы можете просто абстрагироваться от цикла в целом и просто описать работу с массивами вместо элементов, которые их составляют)
разница между векторизацией и развертыванием цикла: Рассмотрим следующий очень простой цикл, который добавляет элементы двух массивов и сохраняет результат в третий массив.
for (int i=0; i<16; ++i) C[i] = A[i] + B[i];разворачивание этого цикла превратит его в нечто вроде этого:
for (int i=0; i<16; i+=4) { C[i] = A[i] + B[i]; C[i+1] = A[i+1] + B[i+1]; C[i+2] = A[i+2] + B[i+2]; C[i+3] = A[i+3] + B[i+3]; }векторизация это, с другой стороны, производит что-то вроде этого:
for (int i=0; i<16; i+=4) addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);где "addFourThingsAtOnceAndStoreResult" является заполнителем для любых встроенных(ых) компилятор использует для указания векторных инструкций. Обратите внимание, что некоторые компиляторы могут автоматическая векторизация очень простые циклы, подобные этому, которые часто могут быть включены с помощью опции компиляции. Более сложные алгоритмы по-прежнему требуют помощи программиста для создания хорошего векторного кода.
векторизация-это термин для преобразования скалярной программы в векторную программу. Векторизованные программы могут выполнять несколько операций из одной инструкции, в то время как скалярные могут работать только с парами операндов одновременно.
С Википедия:
скалярный подход:
for (i = 0; i < 1024; i++) { C[i] = A[i]*B[i]; }подход векторизации:
for (i = 0; i < 1024; i+=4) { C[i:i+3] = A[i:i+3]*B[i:i+3]; }
Это относится к способности делать одну математическую операцию в списке-или "вектор" - чисел в один шаг. Вы часто видите это с Fortran, потому что это связано с научными вычислениями, которые связаны с суперкомпьютерами, где впервые появилась векторизованная арифметика. В настоящее время почти все настольные процессоры предлагают некоторую форму векторизованной арифметики с помощью таких технологий, как SSE от Intel. Графические процессоры также предлагают форму векторизованной арифметики.
векторизация широко используется в научных вычислениях, где огромные куски данных должны быть эффективно обработаны.
в реальном программном приложении я знаю, что он используется в NUMPY(не уверен в другом).
Numpy (пакет для научных вычислений на python), использует векторизация для быстрого манипулирования n-мерным массивом ,который обычно медленнее, если выполняется с помощью встроенных параметров python для обработки матрицы.
хотя тонны объяснений там, вот что векторизация ОПРЕДЕЛЯЕТСЯ КАК IN СТРАНИЦА ДОКУМЕНТАЦИИ NUMPY
векторизация описывает отсутствие каких-либо явных циклов, индексации и т. д., в коде-эти вещи происходят, конечно, просто "за кулисами" в оптимизированном, предварительно скомпилированном C-коде. Векторизованный код имеет много преимуществ, среди которых:
векторизованный код больше лаконично и легче читать
меньше строк кода обычно означает меньше ошибок
код больше напоминает стандартную математическую нотацию (что облегчает, как правило, правильный математический код конструкты)
результаты векторизации в более "подходящие для Python" код. Без векторизация, наш код был бы завален неэффективными и трудно читать для петель.
см. выше ответы. Я просто хотел добавить, что причина желания сделать векторизацию заключается в том, что эти операции могут быть легко выполнены в paraell суперкомпьютерами и мультипроцессорами, что дает большой прирост производительности. На однопроцессорных компьютерах не будет увеличения производительности.
Comments