gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:46:05 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com