我在循环中运行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)