小编Tom*_*vic的帖子

由于if语句导致C++大量性能下降

我在循环中运行4个线程,在循环中我正在评估函数并逐步增加计数器.

while(1) {
    int fitness = EnergyFunction::evaluate(sequence);

    mutex.lock();
    counter++;
    mutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个循环时,正如我在4个运行线程中所说的那样,我每秒得到~200 000 000个评估.

while(1) {
    if (dist(mt) == 0) {
        sequence[distDim(mt)] = -1;
    } else {
        sequence[distDim(mt)] = 1;
    }
    int fitness = EnergyFunction::evaluate(sequence);

    mainMTX.lock();
    overallGeneration++;
    mainMTX.unlock();
}
Run Code Online (Sandbox Code Playgroud)

如果我为序列添加一些随机变异,我每秒得到~13 000 000个评估.

while(1) {
    if (dist(mt) == 0) {
        sequence[distDim(mt)] = -1;
    } else {
        sequence[distDim(mt)] = 1;
    }
    int fitness = EnergyFunction::evaluate(sequence);

    mainMTX.lock();
    if(fitness < overallFitness)
        overallFitness = fitness;

    overallGeneration++;
    mainMTX.unlock();
}
Run Code Online (Sandbox Code Playgroud)

但是当我添加简单的if语句进行检查时,如果新的健身小于旧健身,如果这是真的那么用新的健身替换旧健身.

但性能损失是巨大的!现在我每秒得到~20 000次评估.如果我删除随机变异部分,我每秒也会得到~20 000个评估.

变量overallFitness声明为

extern int …
Run Code Online (Sandbox Code Playgroud)

c++ optimization multithreading

12
推荐指数
3
解决办法
2127
查看次数

标签 统计

c++ ×1

multithreading ×1

optimization ×1