首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SSE内部函数的寄存器不足

使用SSE内部函数的寄存器不足
EN

Stack Overflow用户
提问于 2013-07-17 18:13:28
回答 1查看 259关注 0票数 0

在这篇SSE load/store memory transactions文章中,我问到了显式寄存器-内存事务和中间指针之间的区别。在实践中,中间指针表现出稍高的性能,然而,在硬件方面,什么是中间指针还不清楚?如果创建了指针,是否意味着一些寄存器也被占用,或者寄存器的调用在某些SSE操作期间发生(例如,_mm_mul)?

让我们考虑下面的例子:

代码语言:javascript
复制
struct sse_simple
{
    sse_simple(unsigned int InputLength):
        Len(InputLength/4),
        input1((float*)_mm_malloc((float *)_mm_malloc(cast_sz*sizeof(float), 16))),
        input2((float*)_mm_malloc((float *)_mm_malloc(cast_sz*sizeof(float), 16))),
        output((float*)_mm_malloc((float *)_mm_malloc(cast_sz*sizeof(float), 16))),
        inp1_sse(reinterpret_cast<__m128*>(input1)),
        inp1_sse(reinterpret_cast<__m128*>(input2)),
        output_sse(reinterpret_cast<__m128*>(output))
    {}

    ~sse_simple()
    {
        _mm_free(input1);
        _mm_free(input2);
        _mm_free(output);
    }

    void func()
    {
        for(auto i=0; i<Len; ++i)
            output_sse[i] = _mm_mul(inp1_sse[i], inp2_sse[i]);
    }

    float *input1;
    float *input2;
    float *output; 

    __m128 *inp1_sse;
    __m128 *inp2_sse;
    __m128 *output_sse;

    unsigned int Len;
};

在上面的例子中,中间指针inp1_sse,inp2_sse和output_sse在构造函数中创建了一次。如果我复制大量的sse_simple对象(例如50000或更多),这会导致寄存器短缺吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 18:56:00

首先,寄存器是离计算单元很近(意味着访问非常快)的小内存。编译器试图尽可能地使用它们来加速计算,但当它不能使用时,它会使用内存。由于寄存器中存储的内存量很小,因此寄存器通常只在计算过程中用作临时变量。大多数情况下,除了临时变量(如循环索引)之外,所有内容最终都存储在内存中。因此寄存器不足只会减慢计算速度。

在计算过程中,无论指针指向浮点数、向量还是其他值,指针都存储在通用寄存器中,而向量__m128则存储在特定的寄存器中。

因此,在您的示例中,树数组将存储在内存中,行

代码语言:javascript
复制
output_sse[i] = _mm_mul(inp1_sse[i], inp2_sse[i]);

被编译为:

代码语言:javascript
复制
movaps -0x30(%rbp),%xmm0    # load inp1_sse[i] in register %xmm0
movaps -0x20(%rbp),%xmm1    # load inp2_sse[i] in register %xmm1
mulps  %xmm1,%xmm0          # perform the multiplication the result is stored in %xmm0
movaps %xmm0,(%rdx)         # store the result in memory

如你所见,指针是使用寄存器%rbp%rdx来存储的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17697031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档