相关疑难解决方法(0)

为什么在单独的循环中元素添加比在组合循环中快得多?

假设a1,b1,c1,并d1指向堆内存和我的数字代码具有下列核心循环.

const int n = 100000;

for (int j = 0; j < n; j++) {
    a1[j] += b1[j];
    c1[j] += d1[j];
}
Run Code Online (Sandbox Code Playgroud)

该循环通过另一个外for循环执行10,000次.为了加快速度,我将代码更改为:

for (int j = 0; j < n; j++) {
    a1[j] += b1[j];
}

for (int j = 0; j < n; j++) {
    c1[j] += d1[j];
}
Run Code Online (Sandbox Code Playgroud)

在MS Visual C++ 10.0上进行了全面优化编译,在Intel Core 2 Duo(x64)上为32位启用了SSE2,第一个示例需要5.5秒,双循环示例仅需1.9秒.我的问题是:(请参考我在底部的改写问题)

PS:我不确定,如果这有帮助:

第一个循环的反汇编基本上是这样的(这个块在整个程序中重复大约五次):

movsd       xmm0,mmword ptr [edx+18h]
addsd …
Run Code Online (Sandbox Code Playgroud)

c c++ performance vectorization compiler-optimization

2175
推荐指数
9
解决办法
23万
查看次数

168
推荐指数
7
解决办法
7万
查看次数

哪些标准C++功能可用于查询机器/ OS架构?

用于查询程序运行的硬件或操作系统功能属性的标准C++功能和实用程序是什么?
例如,std::thread::hardware_concurrency()为您提供机器支持的线程数.
但是,如何检测计算机具有多少RAM,或者进程使用了​​多少RAM,或者在某个目录中可以写入多少磁盘空间,或者有多少L2缓存可用?

我更喜欢通过()标准的答案,但TR2或者建议也会很好.

c++ computer-architecture c++11 c++14

16
推荐指数
4
解决办法
1312
查看次数