小编Wha*_*haa的帖子

访问打包在128位寄存器中的任意16位元素

使用英特尔编译器内在函数,给定一个128位寄存器,打包8个16位元素,如何从寄存器中访问(廉价)任意元素,以便后续使用_mm_cvtepi8_epi64(符号扩展两个8位元素,打包在较低位置) 16位寄存器,两个64位元素)?


我会解释为什么我问:

  1. 输入:具有k个字节的内存缓冲区,每个字节为0x0或0xff.
  2. 期望输出:对于输入的每两个连续字节,寄存器分别用0x0和包装两个四字(64位)0xffff ffff ffff ffff.
  3. 最终目标:根据输入缓冲区的条目对k个双精度缓冲区进行求和.

注意:输入缓冲区的值0x0和值0xff可以更改为最有用的值,前提是在总和之前屏蔽效果仍然存在.

从我的问题可以明显看出,我目前的计划如下,在输入缓冲区中流式传输:

  1. 将输入掩码缓冲区从8位扩展到64位.
  2. 使用扩展掩码屏蔽双打缓冲区.
  3. 总结蒙面的双打.

谢谢,阿萨夫

assembly sse simd intrinsics micro-optimization

7
推荐指数
1
解决办法
787
查看次数

关于"this"指针的指针算术

在C++的"this"指针上执行指针运算有什么合法和/或有趣的用途,如果有的话?

为了让SE对这个问题的长度感到满意,我将包含一些相关的代码.

class Foo
{
public:
    Foo(bool terminate = false)
        : _data(terminate ? -1 : 0)
    {}

    void Bar(void)
    {
        if (_data >= 0)
        {
            _data++;
            this[1].Bar();
        }
    }

private:
    int _data;
};

void main()
{
    std::vector<Foo> vec;
    vec.push_back(Foo());
    vec.push_back(Foo());
    vec.push_back(Foo());
    vec.push_back(Foo());
    vec.push_back(Foo(true));

    vec[2].Bar();
}
Run Code Online (Sandbox Code Playgroud)

c++ this pointer-arithmetic this-pointer c++11

0
推荐指数
1
解决办法
290
查看次数