我正在使用 C 语言中的 OpenMP 来并行化我的程序。我的程序中有一个部分将计算值插入到数组中。代码将是这样的:
#pragma omp parallel for
for(i=0; i<bignumber; i++) {
arr[i] = mycalc(i);
}
从我了解到的情况来看,我认为这段代码会在数组中出现 False Sharing 问题arr
。为了避免这个问题,我找到了几种方法,例如:
- 数组填充
- 用块调度
这两种方法要求我知道我的处理器缓存大小有多大。假设我想在一个未知系统上运行我的程序(我不知道缓存大小有多大)。此代码是否有不需要我知道缓存大小的解决方法?或者可能是一个可以读取程序正在运行的系统的缓存大小的 C 代码?