【发布时间】:2014-05-26 07:35:35
【问题描述】:
如果我有这门课:
class MyClass{
short a;
short b;
short c;
};
我有这段代码在上面执行计算:
std::vector<MyClass> vec;
//
for(auto x : vec){
sum = vec.a * (3 + vec.b) / vec.c;
}
我知道 CPU 只从 L1 缓存中加载它需要的数据,但是当 L1 缓存从 L2 缓存中检索数据时,它会加载整个“缓存行”(其中可能包含它不包含的几个字节的数据)不需要)。
L2 缓存从 L3 缓存加载多少数据,而 L3 缓存从主内存加载多少数据? 是否按页面定义,如果是,此答案将如何根据不同的 L2/L3 缓存大小?
【问题讨论】:
-
顺便说一句,如果你没有除法,我建议使用向量/数组的结构而不是向量/数组的结构组织。这样可以方便地使用 SIMD 指令。不幸的是,大多数 ISA 不包括 SIMD 除法,最多提供(并行)单精度 FP 倒数估计指令,可以与 Newton-Raphson 一起使用来执行除法,因此 SIMD 操作可能没有帮助。
标签: performance caching optimization cpu cpu-architecture