我乘以常数 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/