我想利用 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 版本时,我可以看到所有内核都在工作。
我认为这可能是由虚假共享问题引起的,但我找不到。