在Xeon Phi处理器上运行Erlang



如何在Intel Xeon Phi协处理器上编译VM并运行Erlang程序?

Intel Xeon Phi不是典型的x86_64架构,因此不可能在其上运行官方的Erlang VM。唯一的方法是使用交叉编译,并在支持Erlang的不同(主机)机器上自己构建VM,这样它就可以在目标系统(本例中是Phi)上运行。

Xeon Phi还支持与典型的x86_64架构略有不同的指令集,因此您还需要编辑代码。如果您只是交叉编译VM而不修改代码,您可能会得到一个错误:

/tmp/iccvaLP3vas_.s: Assembler messages:
/tmp/iccvaLP3vas_.s:25794: Error: `mfence' is not supported on `k1om'

所以首先你需要在内存栅栏指令周围添加#ifndef子句,这在Phi (mfence, lfencesfence)上是不支持的。这可以归结为打开erts/include/internal/i386/ethr_membar.h文件并添加以下预处理器指令:

#ifndef __MIC__
...
#endif
函数ethr_mfence__, ethr_sfence__ethr_lfence____asm__语句的

,例如

static __inline__ void
ethr_mfence__(void)
{
#if ETHR_SIZEOF_PTR == 4
    if (ETHR_X86_RUNTIME_CONF_HAVE_NO_SSE2__)
        ETHR_NO_SSE2_MEMORY_BARRIER__;
    else
#endif
#ifndef __MIC__
    __asm__ __volatile__ ("mfencent" : : : "memory");
#endif
}

现在您可以尝试交叉编译它。首先下载源代码(在我的例子中是Erlang VM 17.5),然后运行:

$ cd otp_src_17.5
$ export ERL_TOP=`pwd`;
$ ./configure 
    --host=k1om-unknown-linux-gnu 
    --build=x86_64-pc-linux-gnu 
    --without-termcap 
    --without-javac 
    --without-ssl 
    --prefix=/path/to/my/new_installation 
    CC=icc 
    CFLAGS=-mmic 
    LDFLAGS=-mmic 
    DED_LD=icc 
    DED_LDFLAGS="-mmic -shared -Wl,-Bsymbolic" 
    DED_LD_FLAG_RUNTIME_LIBRARY_PATH="-Wl,-R"
$ make
$ make install

icc是Intel的官方编译器,-mmic标志是编译Xeon Phi处理器所必需的。hostbuild标志分别是编译的机器和编译的机器(Phi)的系统/体系结构。在我的例子中,它们有以下值,但如果对您来说不同,您可能希望使用配置。自动检测操作系统/CPU架构的guess脚本

$ ./config.guess
$ x86_64-pc-linux-gnu

就是这样!现在您应该可以在Phi上ssh并运行Erlang了。

$ ssh my-phi-coprocessor
$ cd /path/to/my/new_installation/
$ export PATH=`pwd`/bin:$PATH;
$ erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 6.4

相关内容

  • 没有找到相关文章

最新更新