Основные проблемы с триггерами a) они абсолютно Глобальны - они применяются, неважно, что контекст действия таблицы; и b) они являются тайными; легко забыть, что они там, пока они не причиняют Вам боль с непреднамеренным (и очень таинственный) последствия.
, Который просто означает, что они должны тщательно использоваться для надлежащих обстоятельств; который, по моему опыту, ограничен реляционными проблемами целостности (иногда с более прекрасной гранулярностью, чем можно добраться декларативно); и обычно не в бизнес-или транзакционных целях. YMMV.
Во-первых, я не рекомендую использовать встроенные функции - они не переносимы (между компиляторами одной и той же архитектуры).
Используйте встроенные функции , 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 для некоторых ссылок на руководства.
Поскольку вы запросили ресурсы:
Практическое руководство по использованию SSE с C ++ : Хороший концептуальный обзор того, как эффективно использовать SSE, с примерами.
MSDN Listing of Compiler Intrinsics : Исчерпывающий справочник для всех ваших внутренних потребностей. Это MSDN, но почти все встроенные функции, перечисленные здесь, также поддерживаются GCC и ICC.
Страница SSE Кристофера Райта : Краткий справочник по значениям кодов операций SSE. Я полагаю, что руководства Intel могут выполнять ту же функцию, но это быстрее.
Вероятно, лучше всего написать большую часть вашего кода во встроенных функциях, но проверьте objdump вывода вашего компилятора, чтобы убедиться, что он производит эффективный код. Генерация кода SIMD - все еще довольно новая технология, и она '