c++ - double*bool 乘法有多快,可以向量化吗?

标签 c++ vectorization

我乘以常数 vector<bool>在不同的vector<double>多次。我想知道那有多快,先把它转换成 vector<double> 不是更快吗? , 这样sse就可以用了?

    void applyMask(std::vector<double>& frame, const std::vector<bool>& mask)
    {
        std::transform(frame.begin(), frame.end(), mask.begin(), frame.begin(), [](const double& x, const bool& m)->double{ return x*m;});
    }

最佳答案

您似乎正在尝试将 vector<double> 的部分归零使用 vector<bool> 的面具.

就目前而言,它不可向量化。此外,vector<bool>模板特化将阻碍编译器执行任何类型的自动矢量化的能力。

所以你基本上有两个选择:

简单的方法确实是转换vector<bool>vector<double>相应的零和一。然后问题简化为相同数据类型的简单 vector 到 vector 乘法,这是完全可向量化的。 (甚至可以自动向量化)

更难的方法(可能更快)是使用 _mm_and_pd 进行一些 hack或 _mm_blendv_pd() 内在/指令。但这需要做更多的工作,因为您必须手动矢量化代码。


我建议你走简单的路。除非确实需要,否则无需深入手动矢量化。

关于c++ - double*bool 乘法有多快,可以向量化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9093319/

相关文章:

两个派生类的 C++ 拷贝

arrays - Matlab:带矩阵的 Arrayfun

string - MATLAB:字符串元胞数组之间的单词匹配

python - 等效于使用 numpy

arrays - 在一行中多次递增 MATLAB 数组的一个值

c++ - 如何检查 C++ 字符串是否为 int?

c++ - Qt:在QNetworkAccessManager中发送请求后连接信号

python - Numpy 向量化

c++ - TBB 流程图条件执行和多个输入和输出

c++ - 自动添加和删除列表中的对象