Как скомпилировать виртуальную машину и запустить программы Erlang на сопроцессоре Intel Xeon Phi?Запуск Erlang на Xeon Phi
ответ
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
Хотя Knights Corner является машиной заказа, поэтому нагрузка и магазины обычно завершаются в порядке, вы должны по крайней мере, компилятор забор, чтобы убедиться, что компилятор не сдвинулся окружающим. Поэтому вы должны иметь __asm__ volatile ("" ::: "memory") на стороне MIC вашего ifdef. Кроме того, если у вас есть код, который использует магазины NGO, вы должны вставить реальное значение после этого, чтобы обеспечить их завершение, которое вы можете эмулировать с помощью __asm__ volatile («lock; addl $ 0, (%% rsp)» :: «memory») , –
Эй, @stpk, какую версию ICC вы используете? Composer, Pro и т. Д. Я не думаю, что я мог бы поговорить с вами в двоичной капли. Я хотел бы проверить, насколько хорошо он работает в ICC против компилятора с открытым исходным кодом с менее надежной поддержкой, прежде чем выяснять, нужно ли мне разорвать грандиозное и некоторые изменения для параллельного xe pro. У меня нет тонны свободного времени для отладки и т. Д. До более позднего времени в году. Поэтому я не могу просто подписаться на бесплатную пробную версию, пока я не посмотрю, насколько хорошо все работает. –
@JimCownie поддерживает ICC 'asm volatile (" ":::" memory ")' инструкции? В [Wikipedia] (https://en.wikipedia.org/wiki/Memory_ordering#Compile-time_memory_barrier_implementation) я обнаружил, что нужно использовать '__memory_barrier()'. Кроме того, есть ли простой способ проверить, использует ли Erlang VM код какие-либо магазины NGO? – stpk