标签: intel-mic


在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后端也是如此,如我错了请纠正我).

因此,我想到了三条路线:

  1. 未注册模式下编译GHC ,-fvia-c 然后用icc编译

  2. 使用较旧的GHC版本生成C代码,然后使用icc

  3. 使用较旧的LLVM版本通过GHC LLVM然后从LLVM生成C,然后使用icc

哪条路线最可行(为什么不这样做)?是否还有其他可能性(因为诸如pillar2c之类的工具尚未公开提供,因此我驳回了Pillar路线).

一个相关的问题是关于Phi的x86兼容性 - 似乎不支持SSE/AVX指令,如果使用例如gccclang编译,某些目标代码将无法运行.

更新:

在LLVM会议上与一些英特尔人聊天后,他们似乎不太可能发布他们的Phi LLVM后端.然而,下一代Xeon Phi将支持AVX512.

c haskell llvm icc intel-mic

18
推荐指数
1
解决办法
1181
查看次数

无法使用英特尔编译器强制内联C++函数

我有一个定义为的函数

inline void vec_add(__m512d &v3, const __m512d &v1, const __m512d &v2) {
    v3 = _mm512_add_pd(v1, v2);
}
Run Code Online (Sandbox Code Playgroud)

(这__m512d是映射到Intel MIC架构上的SIMD寄存器的本机数据类型)

由于此函数相当短并且经常被调用,我希望它在每次调用时都被内联.但是,即使在我使用-inline-forceinline-O3选项之后,英特尔的编译器似乎也不愿意内联这个函数.它在编译时报告'Forceinline不尊重电话......'.由于我必须使用某些编译器特定的功能,例如__m512d类型,因此英特尔编译器是我唯一的选择.

更多信息:

文件结构非常简单.该函数vec_add在头文件中定义,该文件mic.h包含在另一个文件中test.cc.函数vec_add只是在循环中重复调用,并且不涉及函数指针.一个简单的代码的版本test.cc看起来像这样

for (int i = 0; i < LENGTH; i += 8) {
    // a, b, c are arrays of doubles, and each SIMD register can hold 8 doubles
    __mm512d va = _mm512_load_pd(a + i); // load SIMD register …
Run Code Online (Sandbox Code Playgroud)

c++ inline icc intel-mic

12
推荐指数
1
解决办法
1524
查看次数

冲突检测指令如何使循环矢量化变得更容易?

AVX512CD指令系列包括:VPCONFLICT,VPLZCNT和VPBROADCASTM.

关于这些指令的维基百科部分说:

AVX-512冲突检测(AVX-512CD)中的指令旨在帮助有效地计算通常无法安全矢量化的循环中元素的无冲突子集.

有哪些例子表明这些指令在向量化循环中有用?如果答案将包括标量循环及其矢量化对应物将会有所帮助.

谢谢!

x86 simd vectorization intel-mic avx512

12
推荐指数
1
解决办法
1071
查看次数

Fast popcount on Intel Xeon Phi

I'm implementing an ultra fast popcount on Intel Xeon® Phi®, as it's a performance hotspot of various bioinformatics software.

I've implemented five pieces of code,

#if defined(__MIC__)
#include <zmmintrin.h>
__attribute__((align(64))) static const uint32_t POPCOUNT_4bit[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
__attribute__((align(64))) static const uint32_t MASK_4bit[16] = {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF};
inline uint64_t vpu_popcount1(uint64_t* buf, size_t n)  { …
Run Code Online (Sandbox Code Playgroud)

c vectorization hammingweight intel-mic xeon-phi

9
推荐指数
1
解决办法
1749
查看次数

7
推荐指数
1
解决办法
2834
查看次数

英特尔Phi上的MKL性能

我有一个例程,在小矩阵(50-100 x 1000个元素)上执行一些MKL调用以适合模型,然后我调用不同的模型.在伪代码中:

double doModelFit(int model, ...) {
   ...
   while( !done ) {
     cblas_dgemm(...);
     cblas_dgemm(...);
     ...
     dgesv(...);
     ...
   }
   return result;
}

int main(int argc, char **argv) {
  ...
  c_start = 1;  c_stop = nmodel;
  for(int c=c_start; c<c_stop; c++) {
    ...
    result = doModelFit(c, ...);
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

调用上面的版本1.由于模型是独立的,我可以使用OpenMP线程来并行化模型拟合,如下所示(版本2):

int main(int argc, char **argv) {
  ...
  int numthreads=omp_max_num_threads();
  int c;
#pragma omp parallel for private(c)
  for(int t=0; t<numthreads; t++) {  
     // assuming nmodel divisible by numthreads...      
     c_start = t*nmodel/numthreads+1; 
     c_end …
Run Code Online (Sandbox Code Playgroud)

c openmp intel-vtune intel-mkl intel-mic

6
推荐指数
1
解决办法
689
查看次数

是否有Xeon Phi的模拟器/模拟器?

我打算将一些计算卸载到Xeon Phi,但是想先测试不同的API和不同的并行编程.

是否有适用于Xeon Phi(Windows或Linux)的模拟器/模拟器?

c c++ parallel-processing intel-mic xeon-phi

6
推荐指数
2
解决办法
1504
查看次数

掩码矢量Intel AVX-512指令的汇编语法

出于测试目的,我正在使用Icc内联汇编程序为Intel的Xeon Phi编写简短的汇编代码段.现在我想使用屏蔽向量指令,但是我无法将它们提供给内联汇编程序.

对于这样的代码:

vmovapd  -64(%%r14, %%r10), %%zmm0{%%k1} 
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
Run Code Online (Sandbox Code Playgroud)

我尝试了很多不同的组合,但没有任何效果.Linux下的编译器版本是intel64/13.1up03,使用GAS语法.

编辑:上面的代码实际上适用于非扩展汇编程序.所以这:

__asm__("vmovapd  -64(%r14, %r10), %zmm0{%k1} ")
Run Code Online (Sandbox Code Playgroud)

有效,而以下情况不是:

__asm__("vmovapd  -64(%[src], %%r10), %%zmm0{%%k1} "
    :
    : [src]"r"(src)
    :)
Run Code Online (Sandbox Code Playgroud)

我想这与在扩展模式下在寄存器名称之前使用double%的必要性有关.但不,k的单个%也不起作用.

x86 inline-assembly icc intel-mic

5
推荐指数
1
解决办法
820
查看次数

获取至强 phi 的特定型号

我正在尝试找到我正在使用的 Xeon Phi 协处理器的确切型号。我运行 micpinfo,这就是我得到的

    ***************************/opt/intel/mic/bin/micinfo***************************
MicInfo Utility Log

Created Fri Jan 10 13:09:40 2014


    System Info
        HOST OS         : Linux
        OS Version      : 2.6.32-279.el6.x86_64
        Driver Version      : 5889-16
        MPSS Version        : 2.1.5889-16
        Host Physical Memory    : 1911 MB

Device No: 0, Device Name: mic0

    Version
        Flash Version        : 2.1.02.0383
        SMC Boot Loader Version  : NotAvailable
        uOS Version          : 2.6.38.8-g9b2c036
        Device Serial Number     : NotAvailable

    Board
        Vendor ID        : 8086
        Device ID        : 225c
        Subsystem ID         : 2500
        Coprocessor Stepping …
Run Code Online (Sandbox Code Playgroud)

icc intel-mic xeon-phi

5
推荐指数
1
解决办法
1203
查看次数

我们如何知道英特尔至强融核协处理器是否存在

我想在Intel Xeon Phi协处理器上运行一个程序.我怎么知道我的机器是否有Intel Xeon Phi协处理器.

intel intel-mic

3
推荐指数
1
解决办法
2948
查看次数

在Xeon Phi上使用GCC

我被告知可以在MIC上运行一个用gcc构建的程序.

真的吗?

如果是,如何进行?

我正在使用gcc版本4.4.7.

gcc intel-mic xeon-phi

2
推荐指数
1
解决办法
1928
查看次数

如何区分Intel Xeon Phi Coprocessor 7120P,7120X,7120D,7120A

我有一个Xeon phi协处理器7120P.
当我运行micinfo时,我看到主板SKU为C0PRQ-7120 P/A/X/D.
我注意到SMC HW Revision声明产品300W Passive CS,我在tomshardware上读到P代表intel xeon phi familiy设备的被动冷却.这是它还是有其他方法可以告诉我在我的系统7120 P/A/X或D上有哪些设备?

根据ark.intel.com上给出的规格,所有四个设备看起来都是一样的.有人可以详细说明这些设备之间的实际差异.

hpc intel-mic xeon-phi

1
推荐指数
1
解决办法
916
查看次数