Wie verwende ich GCC 5.1 und OpenMP, um Arbeit an Xeon Phi auszulagern?

8

Hintergrund

Wir haben erfolglos versucht, die neue GCC 5.1 Version zu verwenden, um OpenMP-Blöcke auf den Intel zu entladen MIC (dh der Xeon Phi). Auf der GCC-Seite Offloading haben wir das Skript build.sh zusammengestellt, um den Zielcompiler "accel" für " intelmic "und der Host-Compiler. Die Kompilierung wird erfolgreich abgeschlossen.

Mit dem Skript env.sh versuchen wir dann das einfache Programm hello.c zu kompilieren. Dieses Programm scheint jedoch nur auf dem Host und nicht auf dem Zielgerät zu laufen.

Da wir im Allgemeinen neu sind und GCC kompilieren, gibt es mehrere Dinge, die wir falsch machen könnten. Wir haben jedoch die bereits erwähnten Ressourcen und das Folgende untersucht (ich habe nicht genug Informationen, um die Links zu veröffentlichen):

  • Auslagerung für Xeon Phi
  • Xeon Phi-Tutorial
  • Intel Xeon Phi Offload Programmiermodelle

Das größte Problem ist, dass sie normalerweise auf den Intel-Compiler verweisen. Während wir planen, eine Kopie zu kaufen, haben wir derzeit keine Kopie. Darüber hinaus ist der Großteil unserer Entwicklungspipeline bereits in GCC integriert, und wir würden es (wenn möglich) auch so beibehalten.

Wir haben die neueste MPSS 3.5-Distribution installiert und nehmen die notwendigen Änderungen vor, um unter Ubuntu zu arbeiten. Wir können erfolgreich kommunizieren und den Status der Xeon Phis in unserem System überprüfen.

In unserem Bemühen haben wir nie einen Hinweis darauf gesehen, dass der Code auch im Mic-Emulationsmodus lief.

Fragen

  1. Hat jemand erfolgreich eine Host / Ziel-GCC-Compiler-Kombination erstellt, die tatsächlich auf den Xeon Phi geladen wird? Wenn ja, welche Ressourcen haben Sie verwendet?
  2. Fehlen etwas im Build-Skript?
  3. Stimmt etwas mit dem Testquellcode nicht? Sie kompilieren ohne Fehler (außer was unten erwähnt wird) und laufen mit 48 Threads (d. H. Der Anzahl der logischen Threads im Host-System).
  4. Da die Google-Suche nicht viel verraten hat, hat jemand Vorschläge für den nächsten Schritt (abgesehen von der Aufgabe des GCC-Offloads)? Ist das ein Fehler?

Danke!

build.sh

%Vor%

env.sh

%Vor%

hello.c (Version 1)

%Vor%

Wir haben diesen Code mit:

kompiliert %Vor%

hello_omp.c (Version 2)

%Vor%

Fast dasselbe, aber stattdessen haben wir das

ausprobiert %Vor%

Syntax. Tatsächlich klagt es mit mic , aber mit allen Gerätenummern (d. H. 0) kompiliert es und läuft auf dem Host. Dieser Code wurde auf die gleiche Weise kompiliert.

    
grumpy_robot 24.04.2015, 15:56
quelle

1 Antwort

1

Das Auslagern auf Xeon Phi mit GCC 5 ist möglich. Um es zum Laufen zu bringen, muss man liboffloadmic für das native MIC-Ziel kompilieren, ähnlich wie es hier gemacht wird. Das Problem Ihrer Einrichtung besteht darin, dass es Host-Emulationsbibliotheken (libcoi_host.so, libcoi_device.so) kompiliert und Sticks mit emuliertem Entladen speichert, obwohl das physikalische Xeon Phi vorhanden ist.

    
Dmitry Mikushin 12.04.2016 10:51
quelle

Tags und Links