Описание тега auto-vectorization

3 ответа

Почему gve autovectorization не работает на матрице свертки больше, чем 3x3?

Я реализовал следующую программу для матрицы свертки #include <stdio.h> #include <time.h> #define NUM_LOOP 1000 #define N 128 //input or output dimention 1 #define M N //input or output dimention 2 #define P 5 //convolution matrix diment…
2 ответа

256-битная векторизация через OpenMP SIMD предотвращает оптимизацию компилятора (скажем, встроенная функция)?

Рассмотрим следующий игрушечный пример, где A является n x 2 Матрица хранится в главном порядке столбца, и я хочу вычислить сумму столбца. sum_0 вычисляет только сумму 1-го столбца, а sum_1 делает 2-й столбец, а также. Это действительно искусственны…
03 июл '18 в 10:24
1 ответ

Автоматическая векторизация с индексом по модулю?

Я пытаюсь заставить clang++ автоматически векторизовать простой цикл шифрования, который делает что-то вроде этого: for(int i = 0; i < sz; ++i) { dst[i] = src[i] ^ key[i] } если dst, src а также key одинаковой длины, у компилятора нет проблем с в…
18 янв '16 в 18:15
1 ответ

Trivial Loop не векторизован gcc 4.8.5

Я пытаюсь узнать больше об автоматической векторизации в GCC. В моем проекте я должен использовать gcc 4.8.5, и у меня есть несколько циклов, которые я вижу, которые не векторизованы. Таким образом, я создал небольшой пример, чтобы играть и понять, …
01 ноя '18 в 15:39
0 ответов

Почему оптимизация O3 не улучшает производительность при использовании типа с плавающей запятой?

Я составил соответствующий C реализация двух float а также int программа умножения матриц, когда я компилирую их в O2 почти все то же самое, но когда я использую O3 признак использования возможности автоматической векторизации, оба они приводят к ра…
1 ответ

Почему начальная загрузка векторизации из выровненного std::array является скалярной? (Г ++/ лязг ++)

У меня проблемы с пониманием того, что мешает компиляторам использовать начальную векторную загрузку при чтении данных из std:: array. Я знаю, что gcc может выдавать отладочную информацию с помощью -fopt-info-vec-*. В подробном журнале я не могу най…
24 дек '16 в 06:39
0 ответов

Компилятор Swift автоматически векторизует циклы как оптимизацию?

Я беру класс по параллельным / распределенным вычислениям и мне было интересно, выполняет ли компилятор Swift автоматическую векторизацию для оптимизации циклов. Я понимаю, что LLVM выполняет много (все?) Оптимизаций. Я нашел эту страницу, которая д…
0 ответов

clang: распечатать текущий шаблон в сообщении об ошибке

У меня есть код с #pragma clang loop vectorize(enable), что обеспечивает векторизацию. Для некоторых типов эта векторизация невозможна - пример: #include <string> #include <vector> template <typename T> void double_entries(std::vec…
19 окт '18 в 17:02
1 ответ

Отключить автоматическую векторизацию определенных циклов в функции в GCC

Я хочу отключить автоматическую векторизацию для определенных циклов в функции. Как я могу сделать это с GCC? Я знаю, что могу отключить автоматическую векторизацию для всей функции с __attribute__((optimize("no-tree-vectorize"))) но как мне сделать…
16 май '14 в 13:28
2 ответа

Почему gcc -O3 автоматически векторизует факториал? Что много лишних инструкций выглядит хуже

Вот очень простая факториальная функция. int factorial(int num) { if (num == 0) return 1; return num*factorial(num-1); } Сборка GCC для этой функции на -O2 является разумной. factorial(int): mov eax, 1 test edi, edi je .L1 .L2: imul eax, edi sub edi…
1 ответ

Массив и автоматическая векторизация указателя в gcc

Я пытаюсь использовать авто-векторизацию с g ++ 5.4 (-ftree-vectorize). Я заметил, что версия массива в коде ниже чего-то заставляет компилятор упустить возможность векторизации во внутреннем цикле, что приводит к значительной разнице в производител…
16 сен '16 в 07:07
2 ответа

Автовекторизация в визуальной студии 2012 для векторов типа Eigen неэффективна

У меня есть std:: vector типов Eigen::vector3d, и когда я компилирую этот код с использованием Microsoft Visual Studio 2012, имеющего флаг /Qvec-report:2 для сообщения подробностей о векторизации. Он показывает, что цикл не векторизован по причине 1…
1 ответ

Выровненная память QVector(). Data()

Я пишу программу с использованием Qt5, и мне нужно выделить QVector <float> имея его data() указатель на 32 байта выровнен. Есть ли в любом случае я мог бы сделать это без изменения самой библиотеки Qt? Мой код выглядит примерно так: QVector &…
0 ответов

GCC 6.3.1 не выполняет авто-векторизацию без -ffinite-math-only

Я хотел бы понять, почему GCC не выполняет авто-векторизацию следующего цикла, если я не передаю -ffinite-math-only. Что касается моего понимания и руководства GCC, оптимизация требует -funsafe-math-optimizations Если выбранное аппаратное обеспечени…
24 июл '17 в 10:30
2 ответа

Использование ограничительного ограничителя с массивами переменной длины C99 (VLA)

Я исследую, как различные реализации простых циклов в C99 автоматически векторизуются на основе сигнатуры функции. Вот мой код: /* #define PRAGMA_SIMD _Pragma("simd") */ #define PRAGMA_SIMD #ifdef __INTEL_COMPILER #define ASSUME_ALIGNED(a) __assume_…
1 ответ

MSVC 2017 поддерживает автоматическую диспетчеризацию процессора?

Я читал на нескольких сайтах, что MSVC может выдавать инструкции AVX, когда используется архитектура SSE2, и обнаруживать время поддержки поддержки AVX. Это правда? Я тестировал различные циклы, которые определенно выиграли бы от поддержки AVX / AVX…
0 ответов

Включает ли gcc ffast-math векторизацию?

Я сейчас компилирую spec2000 art benchmark, используя следующие 2 флага: -Ofast -m32 -march = родной -Ofast -m32 -march = собственный -fno-tree-vectorize Вторая настройка просто отключить векторизатор. Однако, когда я проверил objdump из двух настро…
0 ответов

Есть ли способ помочь авто-векторизации компилятора испускать арифметику сатурации в LLVM?

У меня есть несколько для циклов, которые делают насыщенные арифметические операции. Например: Реализация насыщенного добавления в моем случае выглядит следующим образом: static void addsat(Vector &R, Vector &A, Vector &B) { int32_t a, b…
1 ответ

GCC 4.8.2 ошибка авто-векторизации из-за cout

Мой код выглядит следующим образом, и я использую GCC 4.8.2: #include <iostream> #include <stdint.h> #include <sys/time.h> #include <ctime> using namespace std; int main(int argc, char *argv[]) { struct timespec time_start={0…
23 окт '18 в 01:51
5 ответов

SSE избыточен или не рекомендуется?

Просматривая здесь и в интернете, я могу найти много сообщений о современных компиляторах, опережающих SSE во многих реальных ситуациях, и я только что столкнулся с некоторым кодом, который унаследовал, когда я отключал некоторый код SSE, написанный…
27 ноя '15 в 00:23