问题标签 [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.
intrinsics - 在 Xeon Phi 上为双打操作面具
我正在使用内部函数对 Xeon Phi 进行条件计算。我必须使用双精度值,所以我需要一个 __mmask8。只要我使用一些比较函数,对我来说就没有问题,但是如果我想修改这些掩码,我会遇到一些类型冲突。如果文档为我提供了很多修改用于单精度的 __mmask16 的功能,则没有一个可用于双精度的功能。
我想做如下的事情:
该文档仅为 __mmask16 提供了给定的功能。文档的Vector Mask Intrinsic 章节中的所有操作函数也是如此。
我也可以使用这些功能吗?
是否有像“使用 __mmask16 的每一秒位”这样的约定?
提前致谢
intel - Intel Xeon Phi 上每个时钟周期的乘法次数
在英特尔至强融核中,每个内核有 32 个 512 位宽的向量寄存器。每个向量寄存器每个周期可以进行 16 次单精度浮点运算。并且可以在 1 个周期内完成 2 个操作(1 个在 v-pipe 中,1 个在 u-pipe 中)。
我想知道除了在向量寄存器中完成的向量乘法之外,在 1 个时钟周期内可以完成多少次标量乘法。
timer - 至强 phi 定时器分辨率
我的主要目标是在 xeon phi 协处理器中插入 1ms 的延迟,但我的结果却有大约 9ms 的差异。因此,我尝试使用至强主机和 phi 协处理器进行试验,以找到计时器分辨率。我执行了以下代码:
在主机中运行以下程序:
./a.out Nano 睡眠成功 0.000155
在至强 phi 协处理器中运行:
./nsleep_mic Nano 睡眠成功 0.009998
所以我在 xeon phi 中得到了几乎 90% 的错误等待。
- 为什么会发生这种错误的等待?
- 如果我想要 1ms 的睡眠时间如何解决?
versioning - 英特尔线程构建块支持英特尔至强融核协处理器
我在英特尔的论坛上问过这个问题,但没有运气。
有人知道他们是从哪个版本的英特尔 TBB 开始支持至强融核协处理器的吗?
c - 返回 64 位整数中所有设置位的位置的最快方法是什么?
我需要一种快速的方法来获取 64 位整数中所有一位的位置。例如,给定x = 123703
,我想填充一个数组idx[] = {0, 1, 2, 4, 5, 8, 9, 13, 14, 15, 16}
。我们可以假设我们先验地知道比特数。这将被称为 10 12 - 10 15次,因此速度至关重要。到目前为止,我想出的最快答案是以下怪物,它使用 64 位整数的每个字节作为表的索引,这些表给出了该字节中设置的位数和位的位置:
其中COPY
是一个最多复制 8 个字节的 switch 语句,n
是一个字节中设置的位数的数组,并tabofs
给出了偏移量tabX
,它保存了第 X 个字节中设置的位的位置。 (见下文。)我目前正在__builtin_ctz()
这比在我的 Xeon E5-2609 上展开的基于循环的方法快大约 3 倍。x
按字典顺序迭代给定数量的位集。
有没有更好的办法?
编辑:添加了一个示例(我随后修复了该示例)。完整代码可在此处获得:http: //pastebin.com/79X8XL2P。注意:带有 -O2 的 GCC 似乎优化了它,但英特尔的编译器(我曾经编写它)没有......
另外,让我提供一些额外的背景来解决下面的一些评论。目标是对 N 个可能的解释变量中的 K 个变量的每个可能子集进行统计检验;现在的具体目标是 N=41,但我可以看到一些项目需要 N 高达 45-50。该测试主要涉及分解相应的数据子矩阵。在伪代码中,是这样的:
我为 Intel Phi 板编写了一个版本,它应该在大约 15 天内完成 N=41 的案例,其中约 5-10% 的时间花在了幼稚的getIndices()
情况下,所以马上一个更快的版本可以节省一天或更长时间。我也在研究 NVidia Kepler 的实现,但不幸的是,我遇到的问题(大量的小矩阵运算)并不非常适合硬件(非常大的矩阵运算)。也就是说,这篇论文提出了一个解决方案,通过积极展开循环并在寄存器中执行整个分解,似乎可以在我大小的矩阵上实现数百 GFLOPS/s,但需要注意的是在编译时定义矩阵的维度。(这个循环展开应该有助于减少开销并改进 Phi 版本中的矢量化,因此getIndices()
将变得更加重要!)所以现在我认为我的内核应该看起来更像:
Phi 版本在 `cilk_for' 循环中解决每个模型,从 model=0 到 2 N(或者,更确切地说,是用于测试的子集),但现在为了为 GPU 批量工作并分摊内核启动开销,我必须迭代每个 K=1 到 41 位集合的型号按字典顺序排列(如 doynax 所述)。
编辑 2: 现在假期结束了,这里是我的 Xeon E5-2602 使用 icc 版本 15 的一些结果。我用来基准测试的代码在这里:http ://pastebin.com/XvrGQUat 。我对恰好设置了 K 位的整数执行位提取,因此下表中“基本”列中测量的词典迭代存在一些开销。这些以 N=48 执行 2 30次(根据需要重复)。
"CTZ" 是一个循环,它使用 gcc 内在函数__builtin_ctzll
来获取最低位设置:
Mark 是 Mark 的无分支 for 循环:
Tab1 是我最初的基于表格的代码,带有以下复制宏:
Tab2 与 Tab1 的代码相同,但复制宏仅将 8 个字节作为单个副本移动(借鉴 doynax 和 Lưu Vĩnh Phúc 的想法……但请注意,这并不能确保对齐):
这是结果。我猜我最初声称 Tab1 比 CTZ 快 3 倍,这仅适用于大 K(我正在测试的地方)。Mark 的循环比我的原始代码快,但是去掉COPY2
宏中的分支需要 K > 8 的蛋糕。
icc - 获取特定型号的至强 phi
我正在尝试找到我正在使用的 Xeon Phi 协处理器的确切型号。我运行 micpinfo 这就是我得到的
c - 在 KNC (Xeon Phi) 中查找向量数组中的数字实例
我正在尝试利用 knc (Xeon Phi) 提供的 SIMD 512 来使用 intel 内在函数来提高以下 C 代码的性能。但是,我的内在嵌入式代码运行速度比自动矢量化代码慢
C代码
内在嵌入代码:在下面的代码中,我首先加载数组并将其与搜索键进行比较。内在函数返回使用 _mm512_mask_reduce_add_epi32() 减少的 16 位掩码值。
我相信我有一些如何在此代码中引入额外的循环,因此与自动矢量化代码相比它运行缓慢。与直接返回 128 位寄存器中比较值的 SIMD128 不同,SIMD512 返回掩码寄存器中的值,这增加了我的代码的复杂性。我在这里遗漏了什么吗,必须有一种方法可以直接比较和记录成功搜索的数量,而不是使用 XOR 操作等掩码。
最后,请建议我使用内在函数提高此代码性能的方法。我相信我可以使用内在函数来提高性能。至少对于 SIMD128 来说是这样,在使用内部函数时,我可以获得 25% 的性能。
architecture - 来自英特尔至强 phi 的协处理器架构
我正在从英特尔进入新的至强 phi 协处理器世界。我想问2个问题,但彼此接近。
首先,非常基本,与 gpu 显卡的编程/成本/性能相比,优缺点是什么。
其次,文档说协处理器是通过环互连连接的。存在哪些其他类型的互连以及它们如何工作?(非常欢迎提供有关指导性计算机体系结构的潜在参考资料)。
gmp - 有人在 Xeon Phi 上使用 GMP 吗?
我使用 icc 和 -mmic 选项编译了 GMP,但无法安装在 MIC 上。我应该如何安装?我写了一个演示程序,用icc编译。它说找不到gmp.h。我应该如何在 MIC 上安装 GMP 库以及放置 gmp.h 的位置?
mpi - 将 Xeon-Phi 分配给 MPI 进程
我的系统有两个 xeon-phi 卡连接到一个节点。我正在尝试运行分布式 MPI 代码,该代码在卸载模式下使用 xeon-phi 加速。我想知道如果我每个节点运行两个 MPI 进程,我将如何将 xeon-phi 分配给每个 MPI 进程。如何确保每个 MPI 进程都使用不同的 MIC。