uniform_real_distribution Code Blocks 与 Visual Studio 2019 的性能差异很大
uniform_real_distribution has a huge performance difference between Code Blocks and Visual Studio 2019
我尝试将项目从 Code::Blocks 移植到 Visual C++ 2019。
在那之后,我遇到了一些性能问题。
最明显的性能下降是当我需要生成大量随机双精度变量时。
在网上查了资料,还是无法给出合理的解释。
我在下面简要摘录了部分代码:
#include <iostream>
#include <random>
#include <time.h>
class PublicFunction {
public:
static double RandomDouble(double, double);
private:
static std::mt19937 generator_;
};
std::mt19937 PublicFunction::generator_(static_cast<int>(time(0)));
double PublicFunction::RandomDouble(double min_value, double max_value) {
std::uniform_real_distribution<double> distribution(min_value, max_value);
return distribution(PublicFunction::generator_);
}
int main() {
double d;
double t_start, t_end;
t_start = clock();
for (unsigned i = 0; i < 100000000; ++i) {
d = PublicFunction::RandomDouble(-100, 100);
}
t_end = clock();
std::cout << (t_end - t_start) << std::endl;
system("PAUSE");
return 0;
}
在 运行 之后 code::blocks 中的代码使用 C++ 14 和 Visual C++ 2019。
code::blocks 完成执行时间:6155 毫秒,而 Visual C++ 得到 40305 毫秒,几乎慢 7 倍。
我想知道为什么会出现这个问题,有什么办法可以解决吗?谢谢
首先感谢@churill 的评论。他的建议很有用。
Debug和Release有很多不同。
影响这个问题的关键因素是Release在编译的时候会优化
更多信息:
我尝试将项目从 Code::Blocks 移植到 Visual C++ 2019。 在那之后,我遇到了一些性能问题。
最明显的性能下降是当我需要生成大量随机双精度变量时。
在网上查了资料,还是无法给出合理的解释。
我在下面简要摘录了部分代码:
#include <iostream>
#include <random>
#include <time.h>
class PublicFunction {
public:
static double RandomDouble(double, double);
private:
static std::mt19937 generator_;
};
std::mt19937 PublicFunction::generator_(static_cast<int>(time(0)));
double PublicFunction::RandomDouble(double min_value, double max_value) {
std::uniform_real_distribution<double> distribution(min_value, max_value);
return distribution(PublicFunction::generator_);
}
int main() {
double d;
double t_start, t_end;
t_start = clock();
for (unsigned i = 0; i < 100000000; ++i) {
d = PublicFunction::RandomDouble(-100, 100);
}
t_end = clock();
std::cout << (t_end - t_start) << std::endl;
system("PAUSE");
return 0;
}
在 运行 之后 code::blocks 中的代码使用 C++ 14 和 Visual C++ 2019。
code::blocks 完成执行时间:6155 毫秒,而 Visual C++ 得到 40305 毫秒,几乎慢 7 倍。
我想知道为什么会出现这个问题,有什么办法可以解决吗?谢谢
首先感谢@churill 的评论。他的建议很有用。
Debug和Release有很多不同。
影响这个问题的关键因素是Release在编译的时候会优化
更多信息: