避免不必要的负载(SSE / AVX)

时间:2013-09-10 11:39:52

标签: c++ sse avx

为x64编译时,以下函数使用XMM0寄存器进行参数传递:

void foo (double const scalar)
{
    __m256d vector = _mm256_broadcast_sd(&scalar);
}

在汇编中,vbroadcastsd操作码可以采用寄存器操作数。等效内在似乎只接受指向内存操作数的指针。有没有办法保证编译器会优化这样的负载以避免存储到内存?

2 个答案:

答案 0 :(得分:3)

我不认为任何人都可以保证它,但假设你至少启用了一些优化,如果任何现代编译器没有删除不必要的指针间接,我会非常失望...我当然看到更复杂的问题,编译器已经弄清楚如何简化。

我认为你没有看过生成的代码来确定它的作用(因为你的问题的措辞不同)。

答案 1 :(得分:0)

如果您担心堆栈上的参数传递,那么您的功能可能太短或太重要,最终无法作为单独的函数调用。使用

__forceinline

使用visual C ++或

__attribute__((always_inline)) 

用g ++。