我想利用 OpenMP 使我的任务并行。
我需要对数组的所有元素减去相同的数量并将结果写入另一个向量。两个数组都是动态分配的malloc
,第一个数组是用文件中的值填充的。每个元素都是 type uint64_t
。
#pragma omp parallel for
for (uint64_t i = 0; i < size; ++i) {
new_vec[i] = vec[i] - shift;
}
我shift
想从vec
. size
是 和 的长度,vec
大约new_vec
为 200k。
g++ -fopenmp
我在 Arch Linux 上编译代码。我在 Intel Core i7-6700HQ 上,我使用 8 个线程。当我使用 OpenMP 版本时,运行时间要高 5 到 6 倍。当我运行 OpenMP 版本时,我可以看到所有内核都在工作。
我认为这可能是由虚假共享问题引起的,但我找不到。