问题标签 [intel-mic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x86 - 冲突检测指令如何使向量化循环变得更容易?
AVX512CD 指令系列是:VPCONFLICT、VPLZCNT 和 VPBROADCASTM。
AVX-512 冲突检测 (AVX-512CD) 中的说明旨在帮助有效计算循环中通常无法安全矢量化的元素的无冲突子集。
有哪些示例表明这些指令在矢量化循环中很有用?如果答案将包括标量循环及其矢量化对应物,那将很有帮助。
谢谢!
xeon-phi - 将 Intel 的 #pragma offload 转换为 OpenMP for Xeon Phi(性能问题和其他问题)
我使用英特尔 C++ 编译器 17.0.01,我有两个代码块。
第一个代码块在 Xeon Phi 上分配内存,如下所示:
第二个块评估上述内存并将其复制回主机:
这段代码运行得很好,但#pragma offload 只是英特尔编译器的一部分(我认为)。所以,我想将其转换为 OpenMP。
这就是我将第一个块转换为 OpenMP 的方式:
这就是我将第二个块转换为 OpenMP 的方式:
此外,我使用export OFFLOAD_REPORT=2
它是为了更好地了解运行时发生的情况。
这是我的问题/问题:
- 第一个代码块的 OpenMP 版本与 Intel 版本一样快 (
#pragma offload
)。这里没有什么奇怪的。 - 第二个代码块的 OpenMP 版本比 Intel 版本慢 5 倍。但是,
MIC_TIME
两者相同,但CPU_TIME
不同(OpenMP 版本要高得多)。这是为什么? - 我的英特尔指令是最优的吗?
- 我的 Intel -> OpenMP 翻译是否正确且最佳?
这里还有一些其他的,有点不同的问题:
- 在测试机器上,我有两张 Intel Phi 卡。因为我想使用第二个,所以我这样做:
#pragma omp target device(1)...
. 那是对的吗? - 如果我这样做
#pragma omp target device(5)...
,代码仍然有效!它运行在一张 Phi 卡(而不是 CPU)上,因为性能相似。这是为什么? - 我还在没有 Xeon Phi 的机器上尝试了我的软件(OpenMP 版本),它在 CPU 上运行得很好!这是有保证的吗?当您的机器上没有加速器时,
target device(1)
会被忽略吗? - 是否可以在 OpenMP 卸载区域内执行类似操作
std::cout << print_phi_card_name_or_uid();
(因此我可以确定我的软件在哪张卡上运行)?
simd - Xeon Phi:不可能实现完美的内存合并和充分利用 SMID 单元?
我有一个处理立方体(3D 图像,准确地说是光谱立方体)的 GPU/CUDA 代码。把立方体想象成一系列图像/切片,或者,一堆具有不同空间位置(在正方形上)的光谱。图像的每个像素具有不同的 x、y 值和相同的 z。光谱上的每个像素具有相同的 x,y 但不同的 z。多维数据集的内存以某种方式对齐,以便两个连续的内存地址对应于 x 和 x+1。
在我的 CUDA 代码中,我将每个 CUDA 线程配置为处理不同的频谱。这样我就可以实现全局内存合并。然后我将此代码移植到 Intel Phi (#pragma offload+OpenMP)。就像在 GPU 的情况下,我有每个 Phi 核心来处理不同的频谱。因此,这里也实现了内存合并。但是,性能很差。
- 我认为问题在于,尽管我与全局内存合并,但每个光谱中的像素不在连续的内存地址上,因此,Phi 的矢量化并没有提供任何性能改进。(请记住,每个核心都会在相关频谱上进行某种缩减;更准确地说,它会计算一阶、二阶和三阶矩)。这个想法有意义吗?
- 如果我没记错的话,为了从 SIMD 中获得性能,你的内存地址必须是连续的,对吧?
- 因此,在 Xeon phi 上似乎不可能实现完美的内存合并全局内存并同时充分利用 SIMD。这是有道理的还是我完全错了?
PS:我使用的是英特尔至强融核 7120
c - ICC 编译器 - 错误:并行循环条件不测试循环控制变量
在英特尔 MIC(至强融核)卡上的卸载调用之后,我正在尝试并行化我的 C/OpenMP 代码的“for 循环”。我正在使用“#pragma omp parallel for”,当我使用整数变量作为“循环控制变量”时它编译得很好。在我的代码中,我使用浮点数组作为“循环控制变量”,然后出现错误“并行循环条件不测试循环控制变量”。
没有错误的代码:
有错误的代码:
有什么方法可以将该浮点数组表示法保留在“for 循环”中,以便使用 OpenMP 成功进行并行化?
c - 将功能卸载到英特尔至强融核所需的时间
卸载调用将函数的数据(参数)从主机传输到英特尔 MIC(至强融核协处理器 3120 系列)是否需要预定义的时间?
具体来说,我为要在 MIC 上执行的函数执行卸载调用 ("#pragma offload target(mic)")。该函数有 15 个参数(指针和变量),我已经确认参数在 MIC 上的正确传递。但是我已经简化了代码,目的是检查参数传递的时间,因此它只包含一个简单的“printf()”函数。我使用“sys/time.h”头文件的“gettimeofday()”来测量时间,如下面的代码所示:
主机的一些硬件信息: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz / CentOS release 6.8 / PCI Express Revision 2.0
主程序
函数.c
终端结果:
代码需要 3.5 秒才能完成“卸载目标”。以上结果正常吗?有什么方法可以减少卸载呼叫的显着时间延迟?
intel - 如何从 MPSS 4.4.1 修复 modprobe 错误
在尝试为我的 Xeon Phi 7220P 安装 Intel MPSS 4.x 时,我完全被难住了,因此接触到更广泛的群体。
我按照此链接中的精确步骤操作:Intel MPSS Linux User Guide Rev 4.4.1,并做了 3 次以确保我没有遗漏任何步骤或犯错误,但不断收到以下错误读数:
因此,我不能执行基本的 MPSS 命令,例如 micctrl -s 等,也不能使用 Xeon Phi。
我正在运行 Centos 7(862 内核),并且知道它没有在英特尔 pdf 中列出,但不认为这应该会导致问题,因为似乎上述内核模块似乎根本没有从英特尔 MPSS 安装 - 但不是确定这个诊断是否正确。
非常感谢您的帮助 - 提前非常感谢!