Использование инструкций AVX отключает оптимизацию exp ()?

Я пишу сеть прямого распространения на VC ++ с использованием встроенных функций AVX. Я вызываю этот код через PInvoke в C #. Моя производительность при вызове функции, которая вычисляет большой цикл, включая функцию exp (), составляет ~ 1000 мс для размера цикла 160M. Как только я вызываю любую функцию, которая использует встроенные функции 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.

Спасибо.

6
задан Stephen Canon 5 May 2011 в 00:22
поделиться