Стартиране на Erlang на Xeon Phi

Как мога да компилирам VM и да стартирам програми Erlang на копроцесора Intel Xeon Phi?


person stpk    schedule 21.09.2015    source източник


Отговори (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
person stpk    schedule 21.09.2015
comment
Въпреки че Knights Corner е подредена машина, така че зарежданията и съхраняването обикновено завършват по ред, имате нужда поне от компилаторна ограда, за да сте сигурни, че компилаторът не ги е преместил. Следователно трябва да имате asm volatile (:::memory) в MIC страната на вашия ifdef. Освен това, ако имате код, който използва магазини на НПО, трябва да вмъкнете реална mfence след тях, за да гарантирате тяхното завършване, което можете да емулирате с asm volatile(lock; addl $0,(%%rsp): :памет). - person Jim Cownie; 24.09.2015
comment
Хей @stpk каква версия на ICC използвате? Композитор, професионалист и т.н. Предполагам, че не мога да ви убедя в двоичен спад. Бих искал да проверя колко добре се представя на ICC в сравнение с компилатор с отворен код с по-малко стабилна поддръжка, преди да разбера дали трябва да дам голяма сума и някаква промяна за паралелния xe pro. Нямам много свободно време за отстраняване на грешки и т.н. до по-късно през годината. Така че съм подозрителен да се регистрирам за безплатния пробен период, докато не видя колко добре работят нещата. - person Keith Brings; 28.09.2015
comment
@JimCownie ICC поддържа ли asm volatile ("":::"memory") инструкции? В Wikipedia открих, че трябва да се използва __memory_barrier(). Освен това, има ли лесен начин да проверите дали кодът на Erlang VM използва магазини на НПО? - person stpk; 22.10.2015
comment
@stpk Компилаторът на intel (на unix-подобни операционни системи) поддържа gcc inline asm синтаксис. Мисля, че ако използвате _mm_mfence(), той ще генерира инструкция за mfence, която (както обсъждахме надълго и нашироко) не съществува в KNC. - person Jim Cownie; 23.10.2015
comment
@stpk Има няколко начина за търсене на магазини на НПО (изпълнете кода под SDE software.intel.com/en-us/articles/ НО нито един инструмент за изпълнение не може да удостовери, че няма екземпляри на инструкция в кода, която може да бъде изпълнена с някакъв друг вход. Така че би било много по-добре да проверите източника за Erlang VM, за да видите дали има такива (Тези в библиотеки като libc така или иначе трябва да бъдат правилно защитени, така че не е нужно да се тревожите за тях). - person Jim Cownie; 23.10.2015
comment
@Keith Brings Ако правите разработка с отворен код, трябва да можете да получите компилаторите на Intel безплатно. software.intel.com/en-us/qualify-for- безплатен софтуер/ - person Jim Cownie; 23.10.2015