2015-09-21 7 views

ответ

3

Intel Xeon Phi не является типичной архитектурой x86_64, поэтому на нем невозможно запустить официальную виртуальную машину Erlang. Единственный способ сделать это - использовать cross-compilation и самостоятельно создать виртуальную машину на другой (хост-машине), на которой поддерживается Erlang, так что она запускается в целевой системе (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 , lfence и sfence). Это сводится к открытию файла erts/include/internal/i386/ethr_membar.h и добавляя следующие директивы препроцессора:

#ifndef __MIC__ 
... 
#endif 

вокруг __asm__ заявления в Funtions ethr_mfence__, ethr_sfence__ и ethr_lfence__ например

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. Флаги host и build представляют собой системы/архитектуры соответственно машины, на которой вы компилируете, и машины, которую вы компилируете для (Phi). В моем случае они имели следующие значения, но если для вас это другое, вы можете использовать сценарий config.guess, который автоматически определяет вашу архитектуру ОС/ЦП.

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

И все! Теперь вы должны быть в состоянии ssh на вашем 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 
+0

Хотя Knights Corner является машиной заказа, поэтому нагрузка и магазины обычно завершаются в порядке, вы должны по крайней мере, компилятор забор, чтобы убедиться, что компилятор не сдвинулся окружающим. Поэтому вы должны иметь __asm__ volatile ("" ::: "memory") на стороне MIC вашего ifdef. Кроме того, если у вас есть код, который использует магазины NGO, вы должны вставить реальное значение после этого, чтобы обеспечить их завершение, которое вы можете эмулировать с помощью __asm__ volatile («lock; addl $ 0, (%% rsp)» :: «memory») , –

+0

Эй, @stpk, какую версию ICC вы используете? Composer, Pro и т. Д. Я не думаю, что я мог бы поговорить с вами в двоичной капли. Я хотел бы проверить, насколько хорошо он работает в ICC против компилятора с открытым исходным кодом с менее надежной поддержкой, прежде чем выяснять, нужно ли мне разорвать грандиозное и некоторые изменения для параллельного xe pro. У меня нет тонны свободного времени для отладки и т. Д. До более позднего времени в году. Поэтому я не могу просто подписаться на бесплатную пробную версию, пока я не посмотрю, насколько хорошо все работает. –

+0

@JimCownie поддерживает ICC 'asm volatile (" ":::" memory ")' инструкции? В [Wikipedia] (https://en.wikipedia.org/wiki/Memory_ordering#Compile-time_memory_barrier_implementation) я обнаружил, что нужно использовать '__memory_barrier()'. Кроме того, есть ли простой способ проверить, использует ли Erlang VM код какие-либо магазины NGO? – stpk

 Смежные вопросы

  • Нет связанных вопросов^_^