C++ 转换优化

标签 c++ performance optimization floating-point

我想问是否有比逐个遍历所有值并将它们除以 32768 更快的方法来进行音频转换。

void CAudioDataItem::Convert(const vector<int>&uIntegers, vector<double> &uDoubles)
{
    for ( int i = 0; i <=uIntegers.size()-1;i++)
    {
        uDoubles[i] = uIntegers[i] / 32768.0;
    }
}

我的方法效果很好,但可能会更快。但是我没有找到任何方法来加快它。

感谢您的帮助!

最佳答案

如果您的数组足够大,那么并行化这个 for 循环可能是值得的。 OpenMP 的 parallel for声明是我会使用的。
函数将是:

    void CAudioDataItem::Convert(const vector<int>&uIntegers, vector<double> &uDoubles)
    {
        #pragma omp parallel for
        for (int i = 0; i < uIntegers.size(); i++)
        {
            uDoubles[i] = uIntegers[i] / 32768.0;
        }
    }

使用 gcc 时,您需要在编译要使用的 pragma 时传递 -fopenmp,在 MSVC 上它是 /openmp。由于生成线程具有明显的开销,因此只有在处理大型数组 YMMV 时才会更快。

关于C++ 转换优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282549/

相关文章:

c++ - 图增量构建的性能问题

linux - 我如何计算出给定机器的功能有多强大?

mysql - 导入MySQL数据库很慢,但没有明显的瓶颈

performance - MATLAB 速度优化

c++ - 什么是 C++ 优化和 Visual Studio 中的整个程序优化

c++ - 如何在 struct 数据结构中使用 map STL 并初始化 map 然后引用它?

c++ - 如何在C++中调用cmath库中的特殊函数?

c++ - 在类内结构中使用运算符重载

OpenGL 交错索引数组

wpf - 位图性能优化模式