小编use*_*761的帖子

投机性执行是否会进入昂贵的操作?

如果我理解正确的分支(x86),处理器有时会推测性地采用代码路径并执行指令并"取消"错误路径的结果.如果错误的代码路径中的操作非常昂贵,例如导致高速缓存未命中的内存读取或某些昂贵的数学运算,该怎么办?处理器是否会提前尝试执行昂贵的操作?处理器通常如何处理这个问题?

if (likely) {
    // do something lightweight (addition, subtraction, etc.)
} else {
    // do something expensive (cache-miss, division, sin/cos/tan etc.)
}
Run Code Online (Sandbox Code Playgroud)

c++ x86 speculative-execution branch-prediction

10
推荐指数
1
解决办法
429
查看次数

AVX替代AVX2的矢量移位?

在AVX2我们已经_mm256_srlv_epi32(a, b)_mm256_sllv_epi32(a, b)用于在"A"通过在"B"的8个值移位的一组8个值的.是否有一个使用AVX的有效替代方案,以便我可以留在AVX而不必吐出标量代码?

c++ bit-shift bitwise-operators avx avx2

4
推荐指数
1
解决办法
1270
查看次数

getter/setters with std :: vector <>.push_back(...)

出于某种原因,这不起作用.它编译文件,但在使用getter时没有任何项添加到此向量中.

例如

class class_name {

    public:
        inline std::vector<int> get_numbers() { return m_numbers; }    

    private:
        std::vector<int> m_numbers;
}

....

{
    class_name number_list;
    number_list.get_numbers().push_back(1);
}
Run Code Online (Sandbox Code Playgroud)

如果我直接这样做(m_numbers.push_back(1))它可以工作,但如果我用一个getter把它拉出来它就不会添加任何东西.

c++ vector std

3
推荐指数
1
解决办法
2216
查看次数

Clang的'_mm256_pow_ps'本质在哪里?

我似乎找不到_mm_pow_ps或_mm256_pow_ps的内在函数,它们都应该包含在'immintrin.h'中。

Clang不会定义这些,还是在我不包括的标头中?

sse clang avx

3
推荐指数
1
解决办法
830
查看次数

使用 AVX2 有条件地选择一个常数值

我正在寻找一种基于 AVX2 值的特定条件来选择 AVX2 常量的无分支方式。

我现在正在做的伪代码:

condition = _mm256_cmp_gt(value, limit);
result = _mm256_or(_mm256_and(condition, constant_a), 
                   _mm256_andnot(condition, constant_b));
Run Code Online (Sandbox Code Playgroud)

还有比这更有效的吗?

x86 simd intrinsics avx avx2

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