【发布时间】:2012-07-30 15:03:23
【问题描述】:
我创建了一个非常简单的代码来了解向量访问是否比矩阵访问更快。
我尝试了 3 件事:
1:创建一个包含 100.000.000 个 int 元素的向量:
int *matrix=(int*)malloc(sizeof(int)*100000*1000)
for(long int=x;x<100000*1000;x++)matrix[x]=1;
2:创建一个大小相同的矩阵:
int ** matrix=(int**)malloc(sizeof(int*)*100000);
for(long int=0; x<100000;x++){
matrix[x]=(int*)malloc(sizeof(int*)*1000);
}
for(int x=0; x<100000;x++){
for(int y=0;y<1000;y++){
matrix[x][y]=1;
}
}
3:创建相同的向量,但在其中写入矩阵
for(int x=0; x<100000;x++){
for(int y=0;y<1000;y++){
matrix[(x*1000)+y]=1;
}
}
总是矩阵访问(CASE 2)需要 2 倍于案例 1 和 3。案例 3 比案例 1 快一点。 我在我的 C++ 编译器 (g++) 中使用 -O2 参数
我可以理解为什么向量比矩阵更快:(但我会喜欢一些解释)。 但我不明白为什么案例 3 比案例 1 快,我想乘法过程会减慢很多事情,而不是让它更快。 我不明白为什么,即使差异是 0.002(可能是时间和当时的处理器使用情况(我想))
如果我在没有优化的情况下编译所有 3 个案例,案例 2 比案例 1 慢,案例 3。 因此,如果没有优化过程,情况 1 会更快。
Vector 通常更快?
谢谢
【问题讨论】:
标签: gcc compilation g++