使用AVX指令会禁用exp()优化吗?
|
我正在使用AVX内部函数在VC ++中编写前馈网络。我正在通过C#中的PInvoke调用此代码。当调用一个计算包括函数exp()的大循环的函数时,对于160M的循环大小,我的性能约为1000ms。一旦我调用了使用AVX内部函数的任何函数,然后又使用exp(),则对于同一操作,我的性能就会下降到约8000ms。请注意,计算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 \ Win7。VS的Express版本。
谢谢。
没有找到相关结果
已邀请:
1 个回复
氮顺
弄脏了YMM状态,因此
中的SSE代码停滞了。在
和
之间插入
指令可避免此问题。