Начало работы с инструкциями Intel x86 SSE SIMD

Основные проблемы с триггерами a) они абсолютно Глобальны - они применяются, неважно, что контекст действия таблицы; и b) они являются тайными; легко забыть, что они там, пока они не причиняют Вам боль с непреднамеренным (и очень таинственный) последствия.

, Который просто означает, что они должны тщательно использоваться для надлежащих обстоятельств; который, по моему опыту, ограничен реляционными проблемами целостности (иногда с более прекрасной гранулярностью, чем можно добраться декларативно); и обычно не в бизнес-или транзакционных целях. YMMV.

46
задан Ciro Santilli 新疆改造中心法轮功六四事件 1 June 2019 в 18:51
поделиться

2 ответа

Во-первых, я не рекомендую использовать встроенные функции - они не переносимы (между компиляторами одной и той же архитектуры).

Используйте встроенные функции , GCC отлично справляется , оптимизируя встроенные функции SSE в еще более оптимизированный код. Вы всегда можете взглянуть на сборку и увидеть, как использовать SSE в полной мере.

Встроенные функции просты - как и обычные вызовы функций:

#include <immintrin.h>  // portable to all x86 compilers

int main()
{
    __m128 vector1 = _mm_set_ps(4.0, 3.0, 2.0, 1.0); // high element first, opposite of C array order.  Use _mm_setr_ps if you want "little endian" element order in the source.
    __m128 vector2 = _mm_set_ps(7.0, 8.0, 9.0, 0.0);

    __m128 sum = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2

    vector1 = _mm_shuffle_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3));
    // vector1 is now (1, 2, 3, 4) (above shuffle reversed it)
    return 0;
}

Используйте _mm_load_ps или _mm_loadu_ps для загрузки данных из массивов.

Конечно, есть намного больше возможностей, SSE действительно мощный и, на мой взгляд, относительно простой в освоении.

См. Также https://stackoverflow.com/tags/ sse / info для некоторых ссылок на руководства.

45
ответ дан 26 November 2019 в 20:22
поделиться

Поскольку вы запросили ресурсы:

Практическое руководство по использованию SSE с C ++ : Хороший концептуальный обзор того, как эффективно использовать SSE, с примерами.

MSDN Listing of Compiler Intrinsics : Исчерпывающий справочник для всех ваших внутренних потребностей. Это MSDN, но почти все встроенные функции, перечисленные здесь, также поддерживаются GCC и ICC.

Страница SSE Кристофера Райта : Краткий справочник по значениям кодов операций SSE. Я полагаю, что руководства Intel могут выполнять ту же функцию, но это быстрее.

Вероятно, лучше всего написать большую часть вашего кода во встроенных функциях, но проверьте objdump вывода вашего компилятора, чтобы убедиться, что он производит эффективный код. Генерация кода SIMD - все еще довольно новая технология, и она '

40
ответ дан 26 November 2019 в 20:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: