相关疑难解决方法(0)

如何在循环中添加代码使其更快?

我有一个带内循环的简单函数 - 它缩放输入值,在查找表中查找输出值,并将其复制到目标.(ftol_ambient是我从网上复制的一种技巧,用于将float快速转换为int).

for (i = 0;  i < iCount;  ++i)
{
    iScaled = ftol_ambient(*pSource * PRECISION3);
    if (iScaled <= 0)
        *pDestination = 0;
    else if (iScaled >= PRECISION3)
        *pDestination = 255;
    else
    {
        iSRGB = FloatToSRGBTable3[iScaled];
        *pDestination = iSRGB;
    }
    pSource++;
    pDestination++;
}
Run Code Online (Sandbox Code Playgroud)

现在我的查找表是有限的,并且浮点数是无限的,因此有可能出现一个一个错误.我用一些代码创建了一个函数副本来处理这种情况.请注意,唯一的区别是添加了2行代码 - 请忽略丑陋的指针转换.

for (i = 0;  i < iCount;  ++i)
{
    iScaled = ftol_ambient(*pSource * PRECISION3);
    if (iScaled <= 0)
        *pDestination = 0;
    else if (iScaled >= PRECISION3)
        *pDestination = 255;
    else
    {
        iSRGB = …
Run Code Online (Sandbox Code Playgroud)

c++ optimization visual-c++-6 visual-c++

22
推荐指数
2
解决办法
1811
查看次数

为什么编译时执行比运行时执行快得多?

这个问题所说的相反,这段代码表现出一些奇怪的行为:

long long int fibonacci(int num) {
    if (num <= 2) return 1;
    return fibonacci(num - 1) + fibonacci(num - 2);
}

int main() {
    auto t1 = std::chrono::high_resolution_clock::now();
    long long int x = fibonacci(45);
    auto t2 = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double, std::milli> time(t2 - t1);
    std::cout << "Time taken: " << time.count() << "ms";
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上,使用 (GCC) 编译大约需要 700 毫秒-O3,输出为:

Time taken: 2667.55ms
Run Code Online (Sandbox Code Playgroud)

我将上面的代码重写constexpr如下:

constexpr long long int fibonacci(int num) {
    if (num <= 2) …
Run Code Online (Sandbox Code Playgroud)

c++ performance

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