false 是用堆内存共享大小写吗?
Is false sharing the case with heap memory?
据我所知,错误共享 发生在多个线程试图读取放置在同一缓存行中的小块相邻数据时:
#include <omp.h>
#define NUM_THREADS 4
int main() {
int arr[NUM_THREADS];
# pragma omp parallel num_threads(NUM_THREADS)
{
const int id = omp_get_thread_num();
arr[id] // doing something with it
}
}
如果我动态创建数组呢?
int *arr = new int[NUM_THREADS];
如果我的数组在堆上,是否会发生错误共享?在这种情况下是否有一些缓存行限制?
记忆就是记忆。对于 cpu 来说,栈上的数组与堆上的数组完全一样。所以任何虚假共享问题都保持不变。
据我所知,错误共享 发生在多个线程试图读取放置在同一缓存行中的小块相邻数据时:
#include <omp.h>
#define NUM_THREADS 4
int main() {
int arr[NUM_THREADS];
# pragma omp parallel num_threads(NUM_THREADS)
{
const int id = omp_get_thread_num();
arr[id] // doing something with it
}
}
如果我动态创建数组呢?
int *arr = new int[NUM_THREADS];
如果我的数组在堆上,是否会发生错误共享?在这种情况下是否有一些缓存行限制?
记忆就是记忆。对于 cpu 来说,栈上的数组与堆上的数组完全一样。所以任何虚假共享问题都保持不变。