问题标签 [xeon-phi]

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.

0 投票
1 回答
189 浏览

c++ - 英特尔 C++ 编译器给出“此平台不支持卸载构造”错误

_Cilk_offload在使用关键字的Windows(使用 Visual Studio)上编译基本代码段时,编译器会error : offload constructs are not supported on this platform在所有带有_Cilk_offloadand的行上抛出_Cilk_shared(使用 \Qoffload 编译)

平台或设置的具体问题是什么?

编辑:代码在编译时失败,编译机和目标机不同

以下是我的代码的基本大纲

主文件

卸载.h

卸载.cpp

0 投票
0 回答
409 浏览

multithreading - 在 Xeon Phi 协处理器上使用 Pthreads

我使用 pthreads 编写了一个简单的平流方程求解器,它可以在处理器上正常工作。但是,当我使用 -mmic 标志编译它并在协处理器上运行(使用 micnativeloadex)时,它只使用一个线程(我硬编码它以使用 200)。据我所知,代码应该按原样工作。我在这里错过了什么吗?

代码很脏,但仍然是为了完整性。

0 投票
1 回答
838 浏览

c++ - 如何使英特尔 TBB 库在 Xeon Phi 上可用

我正在尝试在一段至强融核卸载代码中使用英特尔 TBB。代码无法编译并出现错误error : *MIC* cannot open source file "tbb\parallel_for.h"

我安装了 MPSS 堆栈,运行了该binutils.msi实用程序,我在卸载的代码文件顶部的包含如下:

为什么会失败?

我需要更改什么才能成功卸载和运行我的代码?

编辑 :

-tbb选项添加到“MIC 卸载编译器的附加选项”后,编译器找到了该<tbb\parallel_for.h>文件,但是它给出了几个关于 tbb 库代码未标记为共享的警告和错误。以下是我卸载的代码段。

0 投票
1 回答
945 浏览

hpc - 如何区分英特尔至强融核协处理器 7120P、7120X、7120D、7120A

我有一个 Xeon phi 协处理器 7120P。
当我运行 micinfo 时,我看到主板 SKU 是 C0PRQ-7120 P/A/X/D。
我注意到 SMC HW 修订版声明 Product 300W Passive CS,我在 tomshardware 上读到 P 代表英特尔至强 phi 系列设备的被动冷却。这是它还是有任何其他方法可以判断我的系统 7120 P/A/X 或 D 上有哪个设备?

从 ark.intel.com 上给出的规格来看,所有四款设备似乎都是相同的。有人可以详细说明这些设备之间的实际区别是什么。

0 投票
0 回答
368 浏览

intrinsics - _mm512_mask_prefetch_i32gather_ps() 会为每个元素预取整个缓存行吗?

收集预取内在函数_mm512_mask_prefetch_i32gather_ps可用于在 Knights Corner 上预取 32 位浮点数。

由于不存在对应的双精度内在函数,如何将这个内在函数用于预取 64 位或 128 位元素?

是否需要显式预取每个 4 字节块,或者我们是否可以假设每个 32 位变量的预取实际上会预取它占用的整个 64 字节缓存行?

例子:

我想在{1,2,10,12}基地址的偏移量处预取 4 个双精度0xf0000000的偏移量处预取 4 个双精度数。

这对应于 的地址{0xf0000008, 0xf0000010, 0xf0000050, 0xf0000060}

这些占用从 开始的两个缓存行{0xf0000000, 0xf0000040}

_mm512_mask_prefetch_i32gather_ps使用这两个缓存行的基地址就足够了吗?

我最初在英特尔 MIC 论坛上发布了这个问题,但没有成功。

0 投票
1 回答
177 浏览

c - 内联汇编中的 Jknzd,编译错误

我尝试在 C 代码中为 MIC(英特尔至强融核)制作内联汇编。我对 jknzd 指令有疑问。

这是我的代码片段:

编译器是 icc-13.0.1,选项:-mmic -lrt -O3。当我尝试编译时,我收到以下消息:

/tmp/icc1XDD1vas_.s:汇编程序消息:/tmp/icc1XDD1vas_.s:237:错误:无效字符“{”开始操作数 1 {rz-sae}' /tmp/icc1XDD1vas_.s:250: Error: invalid char '{' beginning operand 1{rn-sae}”/tmp/icc1XDD1vas_.s:254:错误:无效字符“{ '开始操作数 1 {rn-sae}' /tmp/icc1XDD1vas_.s:260: Error: invalid char '{' beginning operand 1{rn-sae}'/tmp/icc1XDD1vas_.s:263:错误:无效字符'{'开始操作数 1 {rn-sae}' /tmp/icc1XDD1vas_.s:264: Error: invalid char '{' beginning operand 1{rn-sae}'/tmp/icc1XDD1vas_.s:360:错误:无效字符'{ '开始操作数 1 {rz-sae}' /tmp/icc1XDD1vas_.s:373: Error: invalid char '{' beginning operand 1{rn-sae}'/tmp/icc1XDD1vas_.s:375:错误:无效字符'{'开始操作数 1 {rn-sae}' /tmp/icc1XDD1vas_.s:378: Error: invalid char '{' beginning operand 1{rn-sae}'/tmp/icc1XDD1vas_.s:383:错误:无效字符'{ '开始操作数 1 {rn-sae}' /tmp/icc1XDD1vas_.s:385: Error: invalid char '{' beginning operand 1{rn-sae}'/tmp/icc1XDD1vas_.s:398:错误:无效字符'{'开始操作数 1 {rz-sae}' /tmp/icc1XDD1vas_.s:402: Error: invalid char '{' beginning operand 1{rn-sae}'/tmp/icc1XDD1vas_.s:415:错误:无效字符'{ ' 开始操作数 1{rn-sae}' /tmp/icc1XDD1vas_.s:417: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:421:错误:无效字符“{”开始操作数 1 {rn-sae}' /tmp/icc1XDD1vas_.s:422: Error: invalid char '{' beginning operand 1{rn-sae}'

如果有一个简单的跳转,比如“jmp 1b”就可以了。我究竟做错了什么?

0 投票
3 回答
216 浏览

hpc - 在 Xeon CPU、GPU 和 Xeon Phi 上加速减少操作的方法

我有一个应用程序,其中大型矩阵上的减少操作(如求和、最大值)是瓶颈。我需要尽可能快地做到这一点。mkl 中是否有向量指令可以做到这一点?

在至强 cpu、gpu 或 mic 上是否有特殊的硬件单元来处理它?

通常如何在这些硬件中实现 reduce 操作?

0 投票
1 回答
197 浏览

tbb - 在 Xeon Phi 中使用 tbb 原子操作

tbb compare_and_swap在无锁算法中使用 Xeon Phi 中的操作。由于至强融核是有序机器,它不支持sfence操作。那么原子操作会在 Xeon Phi 上正常工作吗?

0 投票
1 回答
460 浏览

c++ - 英特尔 MIC 模板计算

我想为 Intel Xeon Phi 协处理器(61 核)编写有效的并行应用程序,它执行五点模板计算。我写了两个版本的代码。

首先:我使用 OpenMP“#pragma omp parralel for”

第二:我在 61 个核心之间划分矩阵。矩阵的每一部分由每个内核运行的 4 个硬件线程计算。在这个版本中,我尝试通过计算同一 L2 缓存周围的 4 个线程来减少缓存未命中。

在这个 wersion 循环中,矩阵每个部分的迭代都以这种方式执行:
i=0 -> 线程 0
i=1 -> 线程 1
i=2 -> 线程 2
i=3 -> 线程 3
i=4 -> 线程0
...

运行此代码后。第二个版本比较慢。但为什么?

0 投票
0 回答
62 浏览

c++ - MIC 的奇怪结果

在我的论文中,我运行了一个简单的代码,用于在 Xeon Phi 协处理器上研究 Lennard Jones 系统,并尝试对其进行矢量化并研究执行时间的变化。
我特别使用的机器有 61 个内核,具有 32 kB 的 L1 缓存和 512 kB 的 L2 缓存,向量寄存器可以存储 512 位。

我使用和不使用单元列表方法实现了代码,并使用了不同数量的粒子,特别是从 512 到 16384,每次都加倍。
位置和力被存储在三个不同的向量中(rx,ry,rz 和 fx,fy,fz)。
在没有单元格列表的情况下,我有很好的结果,但在另一种情况下,我有一些奇怪的结果。

细胞列表和粒子数量之间的依赖关系应该与实施的细胞列表方法成线性关系,实际上我得到了一条直线,绘制了粒子数量上的时间,但是 N=8192 和 N=16384 的时间执行力要高得多。
我尝试对这些值附近的 N 值进行一些计算,但缩放比例对于其他数字是正确的,只有这两个数字存在问题。
为了清楚起见,我报告了一些价值:

我认为这是一个技术问题,但我真的不知道为什么会发生这种情况。
我还观察到使用矢量化的变化非常低,没有细胞列表我观察到的变化是 4 倍,或多或少,但使用细胞列表它只有 1.5 倍左右。

问题:

有人知道问题可能是什么吗?为什么这些特定值很奇怪,为什么矢量化增益如此之低?

我的教授告诉我,可能会发生某些值在执行时显示奇怪的结果,有人观察到这样的事情吗?

非常感谢。

下面我报告了评估力的主循环,简而言之,执行的主要部分是使用单元列表实现的。