问题标签 [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.
intel-mic - 在英特尔 MIC 上运行代码时出现设备不可用错误
当我尝试在英特尔 MIC 上运行我的代码时,它会给出一个错误,例如“卸载错误:无法卸载到 MIC - 设备不可用”
我的示例代码是
vectorization - zgemm 在 Intel 的 MIC 上
我必须使用 MIC 的 512 位向量单元完成以下任务:
我想到的方法类似于英特尔为 SSE 提出的方法,也适用于 AVX:
使用_mm512_swizzle_pd()
函数形成:
m0 = |a4|a4|a3|a3|a2|a2|a1|a1| 和 m0_t = |b4|b4|b3|b3|b2|b2|b1|b1| in0 = |d4|c4|d3|c3|d2|c2|d1|c1| in0_r = |c4|d4|c3|d3|c2|d2|c1|d1|
将上述两者相乘并使用类似于 MIC 的 addsub_pd() 的东西。但似乎没有相应的内在。
关于如何实现这一目标的任何建议?
英特尔的 MIC (Xeon Phi) 也有几个 FMA 内在函数,如 fmadd、fmsub、fnmadd、fnmsub,它们应该适合这种情况,我有以下两种方法:
有更好的方法吗?这些方法有什么问题吗?
linux - 如何在 Linux 上使用 Vtune Analyzer API
我想使用 Vtune Profiler API 来分析在 Xeon Phi(Linux,使用卸载执行)上运行的代码,以查看执行的指令数、L1 缓存未命中数等。但我找不到任何解释如何使用的地方这个图书馆。
在 Linux 中哪里可以找到库文件和包含文件?如何编写代码来分析在 Xeon Phi 上运行的短代码?
我会期待这样的事情:
谢谢
vectorization - Xeon Phi 上的 loaddup_pd/unpacklo_pd
如果我在 512 宽的 SIMD 向量中有以下双精度数,例如在 Xeon Phi 寄存器中:
是否有可能使它成为:
使用一条指令?另外,由于双精度数没有按位内在函数,这仍然是实现上述目标的有效方法吗?
vectorization - 英特尔至强融核中的排列
假设我在 Xeon Phi 寄存器中有以下 4 个双精度向量:
我想将它们排列成以下内容:
目标是获得:
如何以最少的指令/周期数实现上述目标?
vectorization - Xeon Phi 中的分散/聚集
我指的是英特尔关于 Xeon Phi 指令集的手册,但无法理解分散/收集指令的工作原理。
假设我有以下双精度向量:
是否可以创建 4 个向量,如下所示:
使用这些说明?有没有其他方法可以实现这一目标?
compiler-construction - 英特尔至强融核在没有昂贵的英特尔编译器的情况下是否可用?
可用作并行平台的英特尔至强融核协处理器是否需要英特尔 Composer XE编译器的许可,或者是否有替代编译器?
c++ - 英特尔 MIC 卸载——它如何与 STL 一起工作?
我正在使用一个用 C++/OpenMP 代码实现的系统,它到处使用 STL 和Eigen的数据结构。从算法上讲,该代码似乎是使用新的 Intel MIC ( Xeon Phi ) 卡进行加速的绝佳候选者。
代码中典型的并行循环如下所示:
上面的伪代码以合理的性能运行,但最好将其中的一部分卸载到 Xeon Phi 卡上。这是我这样做的尝试:
但是,英特尔 ICC/ICPC 编译器会吐出这样的错误:error: function "computeIntensiveFunction" called in offload region must have been declared with compatible "target" attribute.
似乎这样的抱怨出现在涉及 STL 或Eigen的函数和数据结构上。
关于如何解决这个问题的任何想法?
我是使用 Xeon Phi(恢复 CUDA 程序员)的新手,所以我不完全理解“可以卸载什么?”的界限。
linux - 以root身份运行sudo时的环境不同?
我正在尝试安装 Xeon Phi 协处理器。具体行为可能与所涉及的工具有关-我的问题具有更一般的性质。
当我以 root 身份执行命令时,出现分段错误。当我以 root 身份执行它但(在我看来不必要地) usesudo
时,它可以工作:
运行的环境有什么不同micctrl
?
(编辑:)我认为我们排除了环境变量作为下面的选项。
该系统是 SLES 11.2。
谢谢!
c - Intel Xeon Phi 上的快速popcount
我正在 Intel Xeon® Phi® 上实现超快速 popcount,因为它是各种生物信息学软件的性能热点。
我已经实现了五段代码,
可以从https://www.dropbox.com/sh/b3sfqps19wa2oi4/iFQ9wQ1NTg下载支持 OpenMP 的代码总结
该代码是使用 Intel C/C++ Compiler XE 13 使用命令编译的:
代码在协处理器(61 个内核)上以“122 个线程”本地运行,线程亲和性为“平衡”,使用导出:
我正在使用Xeon Phi SE10p,B1 stepping,CentOS6.4在28兆的垃圾(由rand()填充)上测试并迭代10000次,性能如下:
“scalar_popcountu”和“scalar_popcountlu”分别使用“_mm_countbits_32”和“_mm_countbits_64”内在函数,它们利用标量“popcnt”指令。设置“#pragma vector always”要求编译器将负载和总和向量化为 16 个无符号整数或 8 个无符号长整数,尽管 popcount 本身仍然是一个标量指令。
vpu_popcount1 的实现类似于 SSSE3 popcount 实现http://wm.ite.pl/articles/sse-popcount.html。但是,1) Xeon Phi 不支持对整数的打包字节操作(最小值是双字,也就是 32 位)和 2) 它不实现“绝对差的打包和”指令(如 SSSE3 中的 _mm_sad_epu8),因此减少添加是由“vpermf32x4”、“vpaddd”和“movslq”四组组合执行的。因此,该实现生成的指令比原始 SSSE3 版本多得多。
vpu_popcount2 的实现类似于 SSE2 popcount 的实现(可以参考《Hacker's Delight》)。该实现生成的指令比 vpu_popcount1 少,速度快 30% 左右。然而,繁琐的“减加”依然无法避免。
vpu_popcount3 的实现非常特定于 Xeon Phi。混合使用向量和标量操作,它比 vpu_popcount2 快约 15%(在我的实现中,向量操作中的标量操作的穿插是休闲的,可以根据编译器生成的汇编代码重新排列标量操作,但预期的改进就我而言是有限的)。改进基于以下观察:1) Xeon Phi 是按顺序调度,2) 每个时钟周期可以发出两条标量指令或“1 个向量+1 个标量”指令。我已将展开从 8 减少到 4,以避免寄存器文件饱和。
每个函数中提前从内存到 L2 8 循环和从 L2 到 L1 1 循环的显式预取使 L1 命中率从 0.38 增加到 0.994。
展开确实将性能提高了约 15%。这是反直觉的,因为 Xeon Phi 是按顺序调度的。但是 unroll 使 icc 编译器能够进行尽可能多的编译时间调度。
我们有更多的技术来提高性能吗?
来自 Brian Nickerson 的两段更快的代码,
vpu_popcount3_revised:
vpu_popcount5: