通过分支预测或缓存来提高性能?

时间:2018-12-10 10:38:42

标签: c++ performance

我不得不重写代码,以便我至少获得20%的性能提升。 首先,我们获得了一个虚拟课堂成果。 橘子(o)和苹果(a)从水果继承。 新的一个橘子和一个苹果被存储在一个水果载体中,所以我将两个都分开了,它们都有自己的载体。

首先,我认为这是由于分支预测的缘故,因为它们进行了排序,但由于高速缓存行,我也读了多数民众赞成,因为相同的对象在同一行。

新代码:

     double run_experiment(const std::vector<Fruit *> &a, const std::vector<Fruit *> &o, int repeats, int checksum) {
    int total = 0;
    Timer timer;
    timer.start();
    std::cout<<"Size A: " << a.size()<< std::endl;
    std::cout<<"Size O: " << o.size()<< std::endl;
    for (int k = 0; k < repeats; k++) {


        for (int i = 0; i < a.size(); i++) {

            total += a[i]->seeds();

        }
        for (int j = 0; j < o.size(); j++) {

            total += o[j]->seeds();
        }
    }
    std::cout << "total out " << total << std::endl;
    timer.stop();
    assert(total == checksum * repeats);
    return timer.seconds();
}

旧:

    double run_experiment(const std::vector<Fruit*>& data, int repeats, int checksum)
{
    int total = 0;
    Timer timer;
    timer.start();
    for (int r = 0; r < repeats; ++r)
    {
        for (int i = 0; i < data.size(); ++i)
        {
            total += data[i]->seeds();
        }
    }
    timer.stop();
    assert(total == checksum * repeats);
    return timer.seconds();
}

大小为10000,是的,大循环必须是...

0 个答案:

没有答案