Как мога да компилирам VM и да стартирам програми Erlang на копроцесора Intel Xeon Phi?
Стартиране на Erlang на Xeon Phi
Отговори (1)
Intel Xeon Phi не е типична x86_64 архитектура, следователно не е възможно да стартирате официалната Erlang VM на нея. Единственият начин да го направите е да използвате кръстосано компилиране и сами изградете VM на различна (хост) машина, където се поддържа Erlang, така че да работи на целева система (Phi в този случай).
Xeon Phi също поддържа малко по-различен набор от инструкции в сравнение с типичната x86_64 архитектура, така че вие също трябва редактирайте кода. Ако просто компилирате кръстосано виртуалната машина, без да докосвате кода, вероятно ще получите грешка:
/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__
изрази във функции 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 и флагът -mmic
се изисква за компилиране за Xeon Phi. Флаговете host
и build
са системите/архитектурите съответно на машината, където компилирате и машината, за която компилирате (Phi). В моя случай те имаха следните стойности, но ако е различно за вас, може да искате да използвате config.guess скрипт, който автоматично открива вашата OS/CPU архитектура.
$ ./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
asm volatile ("":::"memory")
инструкции? В Wikipedia открих, че трябва да се използва __memory_barrier()
. Освен това, има ли лесен начин да проверите дали кодът на Erlang VM използва магазини на НПО?
- person stpk; 22.10.2015