相关疑难解决方法(0)

加载GCC向量扩展的数据

GCC的向量扩展提供了一种不错的,合理的可移植方式,可以访问不同硬件架构上的某些SIMD指令,而无需借助硬件特定的内在函数(或自动向量化).

一个真实的用例,就是计算一个简单的加法校验和.有一点不明确的是如何将数据安全地加载到矢量中.

typedef char v16qi __attribute__ ((vector_size(16)));

static uint8_t checksum(uint8_t *buf, size_t size)
{
    assert(size%16 == 0);
    uint8_t sum = 0;

    vec16qi vec = {0};
    for (size_t i=0; i<(size/16); i++)
    {
        // XXX: Yuck! Is there a better way?
        vec += *((v16qi*) buf+i*16);
    }

    // Sum up the vector
    sum = vec[0] + vec[1] + vec[2] + vec[3] + vec[4] + vec[5] + vec[6] + vec[7] + vec[8] + vec[9] + vec[10] + vec[11] + vec[12] …
Run Code Online (Sandbox Code Playgroud)

gcc checksum simd vectorization

8
推荐指数
1
解决办法
1751
查看次数

SSE对冲浮标练习

在处理SSE(AVX)中的整数和浮点数时,将所有整数转换为浮点数并仅使用浮点数是一个好习惯吗?因为之后我们只需要一些SIMD指令,而我们需要使用的是添加和比较指令(<, <=, ==),我希望这种转换应该完全保留.

c gcc sse simd avx

2
推荐指数
1
解决办法
1264
查看次数

如何将两个 64 位整数连接成一个 128 位整数?

我有 2 个 64 位整数,我想将其连接成一个 128 位整数。

    uint64_t len_A;
    uint64_t len_C;

    len_AC= (len_A << 64) | len_C;
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会不支持uint128_t.

还有其他方法可以做到吗?

c concatenation 128-bit

2
推荐指数
1
解决办法
1995
查看次数

标签 统计

c ×2

gcc ×2

simd ×2

128-bit ×1

avx ×1

checksum ×1

concatenation ×1

sse ×1

vectorization ×1