Описание тега intrinsics
Intrinsics functions are used in compiled languages to use specific CPU instructions outside the scope of the language.
1
ответ
Особенности SSE3: Как найти максимум большого массива с плавающей точкой
У меня есть следующий код, чтобы найти максимальное значение int length = 2000; float *data; // data is allocated and initialized float max = 0.0; for(int i = 0; i < length; i++) { if(data[i] > max) { max = data; } } Я пытался векторизовать ег…
06 мар '13 в 04:26
4
ответа
Цель _never_executed()?
Я видел этот макрос, определенный ранее, но никогда не знал его цели. Кто-нибудь может пролить свет на это?
16 окт '08 в 12:06
3
ответа
Как работают временные инструкции?
Я читаю то, что каждый программист должен знать о памяти pdf Ульриха Дреппера. В начале части 6 есть фрагмент кода: #include <emmintrin.h> void setbytes(char *p, int c) { __m128i i = _mm_set_epi8(c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c)…
31 дек '12 в 22:16
1
ответ
gcc (6.1.0), использующий "неправильные" инструкции во встроенных функциях SSE
Предыстория: я разрабатываю вычислительно-интенсивный инструмент, написанный на C/C++, который должен работать на различных процессорах x86_64. Чтобы ускорить вычисления, которые являются как плавающими, так и целочисленными, код содержит довольно м…
17 ноя '16 в 17:44
1
ответ
Гиперпоточность отключена в BIOS, но все еще отображается в CPUID
Я сделал функцию (см. Ниже), которая определяет, есть ли у ядра процессора Hyper-Threading. Когда я отключаю Hyper-Threading в BIOS, CPUID по-прежнему сообщает, что ядро имеет Hyper-Threading. Как я могу сделать это правильно, чтобы узнать, включе…
17 июл '14 в 16:27
1
ответ
Оптимизация с использованием SSE Intrinsics
Я пытаюсь преобразовать цикл, который у меня есть, в свойства SSE. Я, кажется, добился довольно хорошего прогресса, и под этим я подразумеваю, что это в правильном направлении, однако я, кажется, где-то сделал некоторые неправильные переводы, поскол…
01 мар '16 в 23:16
5
ответов
Самый быстрый способ умножить два вектора 32-битных целых чисел в C++ с помощью SSE
У меня есть два вектора без знака, оба с размером 4 vector<unsigned> v1 = {2, 4, 6, 8} vector<unsigned> v2 = {1, 10, 11, 13} Теперь я хочу умножить эти два вектора и получить новый vector<unsigned> v_result = {2*1, 4*10, 6*11, 8*13…
23 июн '13 в 19:21
1
ответ
Загрузка невыровненных двойников в регистр _m128d
Я очень новичок в SIMD, поэтому я прошу прощения, если это окажется тривиальным вопросом. У меня есть класс, который содержит (среди прочего) две пары. Я хочу использовать эти две пары и загрузить их в __m128d зарегистрироваться, чтобы я мог выполня…
24 ноя '13 в 09:50
6
ответов
Как оптимизировать цикл?
У меня есть следующая функция узкого места. typedef unsigned char byte; void CompareArrays(const byte * p1Start, const byte * p1End, const byte * p2, byte * p3) { const byte b1 = 128-30; const byte b2 = 128+30; for (const byte * p1 = p1Start; p1 != …
21 окт '10 в 11:40
2
ответа
clflush для аннулирования строки кэша через функцию C
Я пытаюсь использовать clflush вручную вытеснить строку кэша, чтобы определить размеры кэша и строки. Я не нашел никакого руководства о том, как использовать эту инструкцию. Все, что я вижу, - это некоторые коды, которые используют функции более выс…
13 авг '18 в 08:58
1
ответ
g++ SSE внутренняя дилемма - значение от внутренних "насыщенных"
Я написал простую программу для реализации встроенных функций SSE для вычисления внутреннего произведения двух больших (100000 или более элементов) векторов. Программа сравнивает время выполнения как для внутреннего продукта, рассчитанного обычным с…
01 июн '10 в 06:00
0
ответов
Математические функции Visual C++ работают быстрее в Win32
Есть кое-что, что я заметил при профилировании программы VS2013 с vtune, для которой я не смог найти правильного объяснения. По сути, одна из немаловажных горячих точек для программы - математические функции. cos, sin, sqrt и т. д. Мы делаем много м…
23 ноя '16 в 10:10
2
ответа
C/C++ встроенные для невременной загрузки 32- и 64-битных значений на x86_64?
Существуют ли встроенные функции C/C++ для невременных нагрузок (т. Е. Загрузок без кэширования, непосредственно из DRAM) 32- и 64-разрядных значений в x86_64? Мой компилятор - MSVC++2017 toolset v141. Но приветствуются встроенные функции для других…
10 авг '17 в 19:59
1
ответ
g++ 6.3, суммирование по Кахану по внутренним признакам avx сериализуется с ключевым словом volatile
Используя avx intrinsics и алгоритм суммирования Кахана, я попробовал это (только часть "сумматора"): void add(const __m256 valuesToAdd) { volatile __m256 y = _mm256_sub_ps(valuesToAdd, accumulatedError); volatile __m256 t = _mm256_add_ps(accumulato…
05 авг '17 в 23:20
1
ответ
Почему _mm_mfence() производит подсчет для перф события ALL_LOADS?
Я тестирую некоторые из внутренних операций поведения. Я удивился, когда заметил, что _mm_mfence() выдает инструкцию загрузки из пользовательского пространства, но она не учитывается в кэше данных L1 - попадание в буфер, пропуск или заполнение буфер…
25 фев '19 в 23:36
2
ответа
Как загрузить 16 8-битных данных и объединить их в 4 без знака int?
Есть ли какой-нибудь элегантный способ загрузить 16 8-битных данных и объединить их в 4 unsigned int? как следует: загрузить следующий массив (16 epi8) с помощью _mm_load_si128() в __m128i 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, …
22 фев '12 в 16:26
4
ответа
Как я могу напечатать биты переменной __m128i в C?
Я понятия не имею, как напечатать биты переменной __m128i в C, поэтому не стесняйтесь рассказать мне свои идеи! Спасибо!
08 май '17 в 20:29
1
ответ
Какое значение имеет _mm256_shuffle_epi8 в этой реализации Game of Life?
Делая домашнее задание по реализации "Игры жизни" Конвея с использованием встроенных функций, я нашел рабочий код, но не могу понять его основную часть. Эта реализация сначала вычисляет количество живых соседей для каждой продажи и сохраняет результ…
06 фев '19 в 10:32
1
ответ
Почему этот раздел кода возвращает ошибку "Ошибка сегментации"?
Я векторизую часть моей программы, но она возвращается Segmentation fault ошибка. Что не так с этим? Вот упрощенный раздел, который вызывает проблему. j++ а также i++ это именно то, что я хочу, я не хочу быть j += 16, unsigned short int input[256][2…
20 мар '16 в 22:32
1
ответ
Как получить char с двумя строками, сравнивая таблицу с SSE 4.2?
Как получить char с двумя строками, сравнивая таблицу со встроенными SSE 4.2 в C? _mm_cmpistrm возвращает маску важных битов, то есть агрегирует функцию на символе по сравнению с результатом обработки таблицы. __m128i _mm_cmpistrm ( __m128i a, __m12…
23 апр '12 в 14:11