Skocz do: nawigacji, wyszukiwania

MICLAB:Model natywny


Środowisko i modele programowania

dr inż. Łukasz Szustak, Politechnika Częstochowska, IITiS
mgr inż. Kamil Halbiniak, Politechnika Częstochowska, IITiS



Natywny model programowania


Najbardziej zbliżonym do przyjętego powszechnie sposobu programowania procesorów ogólnego przeznaczenia jest natywny model programowania (native model) akceleratorów Intel Xeon Phi. Tego typu aplikacje wykonywane są bezpośrednio przez koprocesor co sprawia, że jest on traktowany jako osobny węzeł obliczeniowy. Kompilacja kodu źródłowego dla architektury akceleratora wymaga wykonania tak zwanej skrośnej kompilacji (cross-compiling), której rezultatem jest plik wykonywalny dostosowany do jego środowiska wykonawczego. W tym celu kod programu należy skompilować na procesorze hosta przy pomocy kompilatora firmy Intel z ustawioną flagą -mmic (w systemach Linux) lub /Qmic (w systemach Windows) [10]. Próba uruchomienia aplikacji na procesorze hosta kończy się niepowodzeniem. Przykładowy kod programu, który może zostać skompilowany, a następnie uruchomiony na koprocesorze aprezentowany został na Listingu 1.


#include <stdio.h>
#include <unistd.h>
 
int main()
{ 
   printf("Liczba dostepnych logicznych rdzeni: %d\n",
   sysconf(_SC_NPROCESSORS_ONLN ));
   return 0;
}
Listing 1. Kod programu w natywnym modelu programowania


Intel Xeon Phi oferuje dwie metody uruchamiania natywnych aplikacji. Pierwsza z nich wymaga ręcznego skopiowania programu oraz niezbędnych do uruchomienia go plików do koprocesora. Po zakończeniu kopiowania należy zalogować się na koprocesor, ustawić wymagane zmienne środowiskowe, a następnie uruchomić aplikację. Realizacja powyższych czynności wymaga użycia kombinacji poleceń scp oraz ssh. Położenie plików niezbędnych do uruchomienia aplikacji (przykładowo bibliotek związanych z wielowątkowością) należy określić przed uruchomieniem w zmiennej środowiskowej LD_LIBRARY_PATH. Przykład ręcznego kopiowania oraz uruchomienia kodu źródłowego przedstawionego na Listingu 1 ilustruje Rysunek 1.


Native manual.png
Rysunek 1. Kopiowanie oraz uruchomienie natywnej aplikacji


Druga metoda uruchamiania zdań na koprocesorze Intel Xeon Phi polega na wykorzystaniu dedykowanego to tego celu narzędzia o nazwie micnativeloadex, które automatycznie kopiuje program wraz z niezbędnymi plikami, a następnie uruchamia go. Rysunek 2 przedstawia przykład uruchomienia kodu źródłowego przedstawionego na Listingu 1 przy użyciu narzędzia micnativeloadex.


Native loadex.png
Rysunek 2. Uruchomienie natywnej aplikacji przy pomocy micnativeloadex


Lokalizację plików (bibliotek) wymaganych do uruchomienia programu należy określić w zmiennej środowiskowej SINK_LD_LIBRARY_PATH. Narzędzie przed uruchomieniem aplikacji sprawdza czy wszystkie niezbędne biblioteki zostały zlokalizowane. Dodatkowo micnativeloadex posiada zestaw flag, które mają wpływ między innymi na sposób uruchamiania aplikacji. Do najważniejszych z nich zalicza się:

  • flagę wykorzystywaną do przekazywania argumentów wywołania programu (-a);
  • flagę określającą koprocesor, na którym ma zostać uruchomiony program (-d);
  • flagę umożliwiającą ustawienie zmiennych środowiskowych na koprocesorze (-e)
  • flagę wyświetlającą listę bibliotek wymaganych do uruchomienia aplikacji (-l);
  • flagę określającą czas (w sekundach) wstrzymania aplikacji przed zakończeniem (-t).



< Intel Many Platform Software Stack

Odciążeniowy model programowania >