问题标签 [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.
performance - 为什么 Xeon Phi 上的简单黎曼和积分的矢量化约简时间如此糟糕?
我是 Xeon Phi 的新手,所以我正在阅读手册,试图了解如何使用向量寄存器提高 Phi 的性能。
考虑这个问题末尾的短代码,它[0,1]
使用黎曼和计算曲线 4/(1+x^2) 下的面积。解析答案是 pi = 3.14159....
该代码基本上由两个几乎相同的代码块组成,它们使用 OpenMP 使用 4 个线程计算答案。唯一的区别是,在第二个
块中,我使用向量化函数__sec_reduce_add()
来计算给线程的 [0,1] 的子域的黎曼和。
第一个代码块的时间是0.0866439 s
,第二个(矢量化)块的时间是0.0868771 s
为什么这两者产生几乎相同的时间。我原以为使用向量寄存器会显着提高性能。
我用icc -mmic -vec-report3 -openmp
标志编译了这个
[注意:我rpt
在两个部分上放置了一个带有变量的 for 循环,因为 rpt=0 和 rpt=1 是“热身”循环,因此时间会稍长一些。我在 rpt=3 处给出了两个部分的时间安排]
c++ - 通过内部函数或指令手动控制 Intel MIC SIMD 操作
我想手动管理我的代码在 MIC 上的 SIMD 操作,并在下面编写内部函数
并且编译器 icpc 给出了这些错误信息。
如果我使用 _mm512_mask_load_ps 可以编译,但是我的内存不能 64 字节对齐,所以使用 _mm512_mask_load_ps 会导致运行时错误。
然后我尝试像这样手动编写内联 asm 块
编译器icpc再次显示错误
我是汇编语言的初学者,如果有人能告诉我为什么icpc没有找到参考以及如何修复它,或者可以向我推荐一些材料,我将非常感激。(我已阅读英特尔® 至强融核™ 协处理器指令集架构参考手册,但仍不知道如何编写。)
非常感谢。
gmp - 有人在 Xeon Phi 上使用 GMP 吗?
我使用 icc 和 -mmic 选项编译了 GMP,但无法安装在 MIC 上。我应该如何安装?我写了一个演示程序,用icc编译。它说找不到gmp.h。我应该如何在 MIC 上安装 GMP 库以及放置 gmp.h 的位置?
assembly - 如何编译包含卸载到麦克风的程序集文件
我编写了一个名为“test.c”的 C 文件,其中包含对 mic 的卸载操作。然后我使用命令“icc -S test.c”将它编译成汇编文件。这产生了两个名为“test.s”和“testMIC.s”的汇编文件。当我继续将它们编译为可执行文件时,出现如下错误。
使用逗号“icc test.s”
/tmp/iccG8ZTVA.o: 在函数
main': test.c:(.text+0x30): undefined reference to
__kmpc_begin' test.c:(.text+0x6f): 未定义引用__offload_target_acquire' test.c:(.text+0x11f): undefined reference to
__offload_offload' test.c:(.text+0x15b): 未定义引用 `__kmpc_end'使用逗号“icc testMIC.s”
/tmp/icc7qv8qX.o: 在函数
__offload_entry_test_c_10main': test.c:(.text+0x1d): undefined reference to
__intel_new_proc_init_R' test.c:(.text+0xd5): 未定义引用__offload_target_enter' test.c:(.text+0x111): undefined reference to
__offload_target_leave' /tmp/icc7qv8qX.o: 在函数main': test.c:(.text+0x140): undefined reference to
__intel_new_proc_init_R'使用逗号“icc test.s testMIC.s”
/tmp/iccEOtVAs.o: 在函数
foo': test.c:(.text+0x170): multiple definition of
foo' /tmp/icczmGFBD.o:test.c:(.text+0x170): 首先定义在这里 /tmp/iccEOtVAs.o: 在函数main': test.c:(.text+0x128): multiple definition of
main' /tmp/icczmGFBD.o: test.c:(.text+0x0): 首先在这里定义 /tmp/icczmGFBD.o: In functionmain': test.c:(.text+0x30): undefined reference to
__kmpc_begin' test.c:(.text+0x6f): undefined reference to__offload_target_acquire' test.c:(.text+0x11f): undefined reference to
__offload_offload' test.c:(.text+0x15b ): 未定义引用__kmpc_end' /tmp/iccEOtVAs.o: In function
__offload_entry_test_c_10main': test.c:(.text+0x1d): 未定义引用__intel_new_proc_init_R' test.c:(.text+0xd5): undefined reference to
__offload_target_enter' test.c:(.text+0x111): 未定义引用__offload_target_leave' /tmp/iccEOtVAs.o: In function
main': test.c:(.text+0x140 ): 对 `__intel_new_proc_init_R' 的未定义引用
有没有人可以帮我解决这个问题?
测试.c:
c - 在 Xeon-Phi 上运行 Haskell
有没有办法编译 Haskell 以在 Xeon Phi 协处理器上运行?
英特尔的一些研究人员最近报告了Haskell 研究编译器 (该编译器未公开,这使得他们的结果基本上无法重现)并测量了Haskell 差距(表明在某些情况下 Haskell 性能超过 C)。他们通过称为Pillar的中间语言(类似于C--)描述编译路线并将其编译为 C,然后他们可以使用icc创建可在 Phi 上执行的目标代码。
GHC 支持编译到 LLVM 或直接生成本机代码 (NCG)。据我所知,既没有针对 Phi 的 NCG,也没有针对 Phi 的 LLVM 后端。可以访问icc,通过C的路由似乎是可能的,但是我不确定它目前有多现实(我认为 GHC 中的 C 代码生成器不再受支持,LLVM IR-to-C 后端也是如此,如我错了请纠正我)。
于是想到了三种路线:
在未注册模式下编译 GHC ,
-fvia-c
然后使用icc编译使用较旧的 GHC 版本生成 C 代码,然后使用icc
使用较旧的 LLVM 版本通过 GHC LLVM,然后从 LLVM 生成 C,然后使用icc
哪条路线最可行(为什么/为什么不)?是否还有其他可能性(我驳回了 Pillar 路线,因为诸如pillar2c之类的工具(还没有?)公开可用)。
一个相关的问题是关于 Phi 的 x86 兼容性——似乎不支持 SSE/AVX 指令,并且如果使用gcc或clang编译某些目标代码将无法运行。
更新:
在 LLVM 会议上与一些英特尔人员交谈后,他们似乎不太可能发布他们的 Phi LLVM 后端。但是,下一代至强融核将支持 AVX512。
intel - 英特尔 MIC 卸载编译指示错误
这是什么错误?找不到任何有用的谷歌搜索*:/
编辑 1:这是我的编译指示:
c++ - 英特尔 MIC 卸载 - 适用于 c++ 对象?
我的问题是卸载区域的代码是否包含 c++ 对象?还是只是 STL?
intel - x86 兼容加速器 Intel Xeon Phi 中是否有 SIMD(SSE / AVX) 指令?
x86 兼容加速器 MIC Intel Xeon Phi 中是否有 SIMD(SSE / AVX) 指令?
mpi - 将 Xeon-Phi 分配给 MPI 进程
我的系统有两个 xeon-phi 卡连接到一个节点。我正在尝试运行分布式 MPI 代码,该代码在卸载模式下使用 xeon-phi 加速。我想知道如果我每个节点运行两个 MPI 进程,我将如何将 xeon-phi 分配给每个 MPI 进程。如何确保每个 MPI 进程都使用不同的 MIC。
c++ - 如何将单个应用程序的特定线程卸载到特定的 Xeon Phi 内核?
假设我在主机上运行了一个 c/c++ 应用程序。主机 CPU 上运行的线程很少,Xeon Phi 内核上运行的线程有 50 个。
我如何确保这 50 个中的每一个都在其自己的 Xeon Phi 内核上运行,并且永远不会从内核缓存中清除(假设代码足够小)。
有人可以概述一个非常笼统的想法如何做到这一点以及哪个工具/API更适合(对于C/C++代码)?
在主机线程聚合器和 50 个 Phi 线程之间交换数据的最快方法是什么?
鉴于实际的并行性将非常有限——这个应用程序将更像 51 线程平面应用程序,具有一些基本的多线程数据同步。
我可以使用传统的 C/C++ 编译器来创建这样的应用程序吗?