首页 文章

在Xeon Phi上运行Erlang

提问于
浏览
3

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

1 回答

  • 3

    Intel Xeon Phi不是典型的x86_64架构,因此无法在其上运行官方Erlang VM . 唯一的方法是使用cross-compilation并在支持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( mfencelfencesfence )上不受支持 . 这可以归结为打开 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__ ("mfence\n\t" : : : "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 Compiler-mmic 标志是编译Xeon Phi所必需的 . hostbuild 标志分别是您编译的机器和为其编译的机器(Phi)的系统/体系结构 . 在我的情况下,它们具有以下值,但如果它与您不同,您可能希望使用自动检测OS / CPU体系结构的config.guess脚本 .

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

    就是这样!现在你应该能够在你的Phi上运行并运行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
    

相关问题