0
ответов

Как оптимизировать строку кода «u[0]*v[0] + u[2]*v[2]» с помощью SSE или GLSL

У меня есть следующая функция (из проекта с открытым исходным кодом «recast navigation» ): /// Получает скалярное произведение двух векторов на плоскости xz. (@p u . @p v) /// @param[in] u Вектор [(x, y, ...
вопрос задан: 21 January 2018 18:39
0
ответов

Автоматически генерировать имя регистра xmm в макросе газа?

Я хотел бы написать макрос газа для генерации кода, содержащего различные инструкции movdqu для регистра xmm в зависимости от параметра n. .macro xxmov n, p1 .if (\ n == 1) ...
вопрос задан: 13 November 2017 02:38
0
ответов

Поместить регистр XMM в стек

Есть ли способ поместить упакованное целое двойное слово из регистра XMM в стек? а потом вставлять обратно при необходимости? В идеале я ищу что-то вроде PUSH или POP для общего...
вопрос задан: 13 November 2017 02:36
0
ответов

Разница между инструкциями MOVDQA и MOVAPS x86?

Я ищу техническое описание Intel: архитектуры Intel® 64 и IA-32 Руководство разработчика программного обеспечения, и я не могу найти разницу между MOVDQA: Move Aligned Double Quadword MOVAPS: Move Aligned Packed ...
вопрос задан: 9 November 2017 01:50
0
ответов

Как выровнять стек по 32 байтам Граница в GCC?

Я использую сборку MinGW64 на основе GCC 4.6.1 для 64-битной цели Windows. Я играюсь с новыми инструкциями Intel AVX. Мои аргументы командной строки: -march = corei7-avx -mtune = corei7-avx -mavx. ...
вопрос задан: 7 November 2017 14:53
0
ответов

Самое быстрое 50% -ное масштабирование (A) изображений RGB32 с использованием встроенных функций sse

Я хочу уменьшать изображение как можно быстрее в C ++. В этой статье описывается, как эффективно усреднить 32-битные изображения RGB на 50%. Это быстро и хорошо выглядит. Я попытался изменить этот подход ...
вопрос задан: 3 August 2017 10:06
0
ответов

SSE: разница между _mm_load/store и использованием прямого доступа по указателю

Предположим, я хочу добавить два буфера и сохранить результат. Оба буфера уже распределены по 16 байтам. Я нашел два примера, как это сделать. Первый использует _mm_load для чтения данных из...
вопрос задан: 2 August 2017 15:39
0
ответов

Как проверить компьютер, поддерживает ли он SSE2 в Delphi 32?

C ++ способ сделать это здесь (под Windows). Тот же ответ, но под Linux с использованием GCC. Выдержка из соответствующего asm-кода, насколько я понимаю: mov eax, 1 cpuid mov features, edx Я не ...
вопрос задан: 23 May 2017 12:33
0
ответов

Как получить абсолютное значение 2 двойных или 4 плавающих с помощью набора инструкций SSE? (Вплоть до SSE4)

Вот пример кода C, который я пытаюсь ускорить с помощью SSE, два массива имеют длину 3072 элемента с двойными числами, могут опускаться до плавающего положения, если мне не нужна точность удвоений. double sum = ...
вопрос задан: 23 May 2017 12:32
0
ответов

Оптимизация кода SSE GCC

Этот пост тесно связан с другим, опубликованным мной несколько дней назад. На этот раз я написал простой код, который просто добавляет пару массивов элементов, умножает результат на значения в другом массиве ...
вопрос задан: 23 May 2017 12:25
0
ответов

SIMD математические библиотеки для SSE и AVX

Я ищу SIMD математические библиотеки (желательно с открытым исходным кодом) для SSE и AVX. Я имею в виду, например, если у меня есть регистр AVX v с 8 значениями с плавающей запятой, я хочу, чтобы sin (v) возвращал грех всех восьми значений в ...
вопрос задан: 23 May 2017 12:25
0
ответов

Optimzing SSE-code

В настоящее время я разрабатываю C-модуль для Java-приложения, которое нуждается в некоторых улучшениях производительности (см. Повышение производительности сетевого кодирования для фона). Я попытался оптимизировать ...
вопрос задан: 23 May 2017 12:22
0
ответов

Развертывание цикла для достижения максимальной пропускной способности с Ivy Bridge и Haswell

Я рассчитываю восемь точечных продуктов одновременно с AVX. В моем текущем коде я делаю что-то вроде этого (до развертывания): Ivy-Bridge / Sandy-Bridge __m256 areg0 = _mm256_set1_ps (a [m]); для (int i = 0; i
вопрос задан: 23 May 2017 12:17
0
ответов

Ошибка сегментации при работе с интринками SSE из-за неправильного выравнивания памяти

Я работаю с интринсами SSE в первый раз и я сталкиваюсь с ошибкой сегментации даже после обеспечения 16-байтового выравнивания памяти. Этот пост является продолжением моего предыдущего вопроса: Как...
вопрос задан: 23 May 2017 12:16
0
ответов

چگونه می توان بلافاصله 128 بیتی را به رجیسترهای XMM منتقل کرد

در حال حاضر وجود دارد یک س onال در این مورد وجود دارد ، اما به دلیل "مبهم" بسته شد بنابراین من یک سوال جدید را باز می کنم - من جواب آن را پیدا کردم ، شاید به دیگران نیز کمک کند. سوال این است: چگونه توالی دنباله ای را می نویسید ...
вопрос задан: 23 May 2017 12:10
0
ответов

лучший кроссплатформенный метод для выравнивания памяти

Вот код, который я обычно использую для выравнивания памяти с помощью встроенной Visual Studio и GCC void * align_malloc (size_t size, size_t align) {void * result; #ifdef _MSC_VER result = ...
вопрос задан: 23 May 2017 12:00
0
ответов

Атомарное чтение 16 байт на процессорах x64

Мне нужно атомарно прочитать/записать 16 байт. Я пишу только с помощью cmpxchg16, который доступен на всех процессорах x64, кроме, я думаю, одного малоизвестного AMD. Теперь вопрос для выровненных 16 ...
вопрос задан: 23 May 2017 11:52
0
ответов

Что может привести к тому, что _mm _setzero _si128 ()будет SIGSEGV? [дубликат]

Возможный дубликат :Qt, GCC, SSE и выравнивание стека Я конвертирую симулятор с TinyPTC на WxWidgets. Некоторые графические подпрограммы оптимизированы с помощью встроенных функций SSE. При инициализации...
вопрос задан: 23 May 2017 10:24
0
ответов

Заголовочные файлы для встроенных функций x86 SIMD

Какие заголовочные файлы содержат встроенные функции для различных расширений набора инструкций x86 SIMD (MMX, SSE, AVX, ...)? Кажется, невозможно найти такой список в Интернете. Поправьте меня если я ошибаюсь.
вопрос задан: 2 January 2017 07:30
0
ответов

Сколько регистров XMM доступно на процессоре x86 с поддержкой SSE?

Как узнать количество регистров XMM на процессоре с поддержкой SSE? На Intel X5550, например.
вопрос задан: 23 December 2016 14:25
0
ответов

Как объединить два значения __m128 в __m256?

Я хотел бы объединить два значения __m128 в одно __m256. Примерно так: __m128 a = _mm_set_ps(1, 2, 3, 4); __m128 b = _mm_set_ps(5, 6, 7, 8); что-то вроде: __m256 c = { 1, 2, 3, 4, ...
вопрос задан: 23 December 2016 04:49
0
ответов

Инструкции SSE: Byte+Short

У меня есть очень длинные массивы байтов, которые нужно добавить в целевой массив типа short (или int). Существует ли такая инструкция SSE? А может их набор?
вопрос задан: 29 June 2016 13:08
0
ответов

Сокращение суммы байтов без знака без переполнения с использованием SSE2 на Intel

Я пытаюсь найти сокращение суммы 32 элемента (каждый 1 байт данных) на процессоре Intel i3. Я сделал так: с=0; для (я=0; я<32; я++) { s = s + а[i]; } Однако это занимает больше времени, так как...
вопрос задан: 11 June 2016 01:06
0
ответов

Оптимизация кода SSE2

Я использую встроенные функции SSE2 для оптимизации узких мест моего приложения и задаю следующий вопрос : ddata = _mm_xor_si128 (_mm_xor_si128 (_mm_sll_epi32 (xdata, 0x7u), _mm_srl_epi32 (tdata, ...
вопрос задан: 19 May 2016 05:54
0
ответов

Умножение SSE 16 x uint8_t

Я хочу умножить с помощью SSE4 объект __m128i на 16 8-битных целых чисел без знака, но я смог найти только внутреннюю функцию для умножения 16-битных целых чисел. Нет ничего такого, как _mm_mult_epi8?
вопрос задан: 31 January 2016 09:18
0
ответов

SSE (SIMD): умножение вектора на скаляр

Обычная операция, которую я делаю в своей программе - это масштабирование векторов на скаляр (V*s, например, [1,2,3,4]*2 == [2,4,6,8]). Существует ли инструкция SSE (или AVX) для этого, кроме как сначала загружать скаляр в каждый ...
вопрос задан: 12 January 2016 23:24
0
ответов

Инструкции SSE: какие процессоры могут выполнять атомарные операции с памятью 16B?

Рассмотрим один доступ к памяти (одно чтение или одна запись, но не чтение + write) Инструкция SSE на процессоре x86. Инструкция обращается к 16 байтам (128 битам) памяти и доступной памяти ...
вопрос задан: 10 October 2015 02:56
0
ответов

Получение максимального значения в векторе __m128i с помощью SSE?

Я только начал использовать SSE и не понимаю, как получить максимальное целочисленное значение (max) __m128i. Например: __m128i t = _mm_setr_ps(0,1,2,3); // макс(т) = 3; Поиски привели меня к...
вопрос задан: 17 September 2015 13:42
0
ответов

Доступ к произвольным 16-битным элементам, упакованным в 128-битный регистр

С помощью встроенных функций компилятора Intel, учитывая 128-битный регистр, упаковывающий 8 16-битных элементов, как я могу получить доступ (дешево) к произвольным элементам из регистр, для последующего использования _mm_cvtepi8_epi64 (...
вопрос задан: 16 September 2015 14:55
0
ответов

Как сравнить два вектора с помощью SIMD и получить один логический результат?

У меня есть два вектора по 4 целых числа в каждом, и я хотел бы использовать команду SIMD для их сравнения (скажем, сгенерировать вектор результатов, где каждая запись равна 0 или 1 в зависимости от результата сравнения). Затем я бы ...
вопрос задан: 27 April 2015 16:01