Я пишу сеть прямой связи в VC ++ с использованием встроенных функций AVX. Я вызываю этот код через PInvoke в C #. Моя производительность при вызове функции, которая вычисляет большой цикл, включая функцию exp (), составляет ~ 1000 мс при размере петли 160 МБ. Как только я вызываю любую функцию, которая использует встроенные функции AVX, а затем впоследствии использую exp (), моя производительность падает до ~ 8000 мсек для той же операции. Обратите внимание, что функция, вычисляющая exp (), является стандартной C, и вызов, который использует встроенные функции AVX, может быть совершенно не связан с обрабатываемыми данными. Какой-то флаг срабатывает где-то во время выполнения.
Другими словами,
A(); // 1000ms calculates 160M exp()
B(); // completely unrelated but contains AVX
A(); // 8000ms
или, что любопытно,
C(); // contains 128 bit SSE SIMD expressions
A(); // 1000ms
Я заблудился относительно того, какой возможный механизм здесь происходит, или как заняться солнцем. Я на Intel 2500K CPU \ Win 7. Экспресс версии VS.
Спасибо.