gpt4 book ai didi

c++ - 内部存储 - 性能不佳

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:32 26 4
gpt4 key购买 nike

我想为 Xeon Phi(60 核)编写基准测试。在我的程序中,我使用 OpenMP 标准和 Intel 内在函数。我实现了算法的并行版本(5 点模板计算),它比标量算法快 230 倍。我想将 SIMD 添加到并行代码中。我有性能问题。当我调用 _m512_store_pd() 时,计算性能会降低,并且带有 SIMD 的并行版本比没有 SIMD 的版本慢。问题是什么?我应该怎么做才能获得更好的性能?

for(int i=start; i<stop; i+=threadsPerCore)
{
for(int j=8; j<n+8; j+=8)
{
__m512d v_c = _mm512_load_pd(&matrixIn[i * n_real + j]);
__m512d v_g = _mm512_load_pd(&matrixIn[(i - 1) * n_real + j]);
__m512d v_d = _mm512_load_pd(&matrixIn[(i + 1) * n_real + j]);
__m512d v_l = _mm512_loadu_pd(&matrixIn[i * n_real + (j - 1)]);
__m512d v_p = _mm512_loadu_pd(&matrixIn[i * n_real + (j + 1)]);

__m512d v_max = _mm512_max_pd(v_c, v_g);
v_max = _mm512_max_pd(v_max, v_d);
v_max = _mm512_max_pd(v_max, v_l);
v_max = _mm512_max_pd(v_max, v_p);

_mm512_store_pd(&matrixOut[i * n_real + j], v_max);
}
}

我从 8 开始计算,因为我在开头有一个 vector ,在结尾有一个 vector 是光环元素。 n_real 是 vector 的大小 -> n + 16。计算开始和停止,因为 i 60 核的分区矩阵和 opne 部分 (m/60) 由 4 个 HM 线程计算。

最佳答案

有人(也许是您)似乎在英特尔开发人员专区 https://software.intel.com/en-us/forums/topic/531721 上提出了相同的问题(至少,引用的代码示例与您的相同)哪里有答案(包括获得 40% 性能提升的重写)。

也许阅读会有用?

(如果是你,我不反对在两个地方都问,但是告诉这里的人你已经在那里问过会很礼貌,这样他们就不会浪费时间重复人们已经给出的答案在其他论坛)。

关于c++ - 内部存储 - 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com