OpenMPI C++ und Eclipse Parallel Tool Platform

Bei meiner Standartinstallation von Eclipse Parallel Tool Platform (Eclipse PTP) unter Fedora 19 läuft OpenMPI nicht ganz gerade. Dieses Tutorial soll als Konfigurationsanleitung dienen.

1. xxx could not be resolved - Unaufgelöste Symbole bei C++ Projekte

Das Standart-MPI Projekt mit dem Pi berechnet wird wird erstellt, Eclipse kann jedoch die C++ Symbole von OpenMPI nicht auflösen. Die folgenden Fehler erscheinen in Eclipse


Function 'Finalize' could not be resolved
Symbol 'COMM_WORLD' could not be resolved
Method 'Reduce' could not be resolved
Method 'Bcast' could not be resolved
Method 'Get_rank' could not be resolved
Symbol 'COMM_WORLD' could not be resolved
Method 'Get_size' could not be resolved
Symbol 'COMM_WORLD' could not be resolved
Function 'Init' could not be resolved
Symbol 'COMM_WORLD' could not be resolved

Und das ganze als Screenshot:

Rot angezeigt: Eclipse kann die C++ Symbole nicht auflösen
Rot angezeigt: Eclipse kann die C++ Symbole nicht auflösen

Abhilfe kommt sofort: Einfach das OpenMPI-Include directory manuell einbinden. Dazu einfach Rechtsklick auf das Projekt->Properties->C/C++ Build->Settings->GCC C++ Compiler->Includes und da einfügen. Bei mir ist das Verzeichnis von OpenMPI unter


/usr/include/openmpi-x86_64

zu finden

Include in GCC C++ Compiler manuell einfügen
Include in GCC C++ Compiler manuell einfügen

Eventuell das Projekt Aktualisieren (Rechtsklick->Refresh) und schon sind die Fehler verschwunden

Eclipse-PTP-ErrorEX
Fehler to be gone

 

2. Projekt lauffähig machen

OK, mein Programm ist geschrieben, ich will es jetzt auch lauffähig machen. Ich verwende OpenMPI und Environment Module.

Dazu müssen wir die "Run Configuration" so anpassen, das mpirun als Programm gestartet wird und LD_LIBRARY_PATH so gesetzt wird, dass libmpi_cxx gefunden wird. Letzteres ist notwendig, da ich Environment Modules verwende, standartmäßig also kein Path auf libmpi_cxx ziegt.

2.1 mpirun ausführen

Wir bearbeiten also die Run Configuration

Eclipse-PTP-RunConfig0Bei C/C++ Application müssen wir nun den Pfad von mpirun angeben. Eclipse erwartet den absoluten Pfad. Bei mir ist mpirun im folgenden Pfad vorhanden

/usr/local/bin/mpirun

Sollte dieser bei euch nicht funktionieren, kann mit dem folgenden Befehl danach gesucht werden

whereis -b mpirun

Danach einfach dort angeben

Wir bearbeiten die Run configuration
Wir bearbeiten die Run configuration

Nachdem wir mpirun nun noch sagen müssen, wie viele Prozesse benötigt werden und wo was Binary zu finden ist, bearbeiten wir auch noch die Arguments

Die Anzahl an Prozessen und der Ort der Binary werden eingestellt
Die Anzahl an Prozessen und der Ort der Binary werden eingestellt

ich geben folgende Konfiguration ein

-np 4 Debug/sandbox_mpi

-np 4 bedeutet, wir möchten 4 Prozesse haben und Debug/sandbox_mpi gibt den Ort der Binary an. Mein Projekt heißt sandbox_mpi und ich bin im Debug.

Fast geschafft!

Der letzte Schritt ist noch die Konfiguration von LD_LIBRARY_PATH. DAzu gehen wir in den Reiter "Environment" (wir sind immer noch in der Run-Configuration).

Wir konfigurieren LD_LIBRARY_PATH so, dass libmpi_cxx gefunden wird
Wir konfigurieren LD_LIBRARY_PATH so, dass libmpi_cxx gefunden wird

Klick auf New und wir geben bei LD_LIBRARY_PATH den Wert

/usr/lib64/openmpi/lib

ein. Der Pfad kann abhängig vom System variieren. Sollte die Konfiguration nicht passen, so kann folgendermaßen den Pfad ermittelt werden:

Im Terminal das Modul laden

module load mpi/openmpi-x86_64

LD_LIBRARY_PATH ausgeben:

echo $LD_LIBRARY_PATH

Konfiguration von LD_LIBRARY_PATH auslesen
Konfiguration von LD_LIBRARY_PATH auslesen

3.  Fertig!

Eclipse-PTP-ErrorEX
Nun kann Eclipse ordnungsgemäß ein OpenMPI C++ Programm starten

 [Update]

Aktuell verwende ich Eclipse Luna 4.4.2 auf Ubuntu 14.04 und selbiges Eclipse auf Arch Linux. Bei beiden Distributionen musste ich nicht mehr nachbessern, sondern funzt jetzt out-of-the-Box. Sehr schön!

Eclipse Java .gitignore

Wer viel mit GIT und Eclipse arbeitet, weiss wie mühsam es ist, keine anständige .gitignore zu haben.

Das folgende Template soll dem Abhilfe schaffen

# Build directories #
/build/
/bin
# Binary and temp files #
*.class
.DS_Store
# Package Files #
*.jar
*.war
*.ear
*.db
######################
# Windows
######################
# Windows image file caches
Thumbs.db
# Folder config file
Desktop.ini
######################
# Eclipse
######################
*.pydevproject
.project
.metadata
bin/**
tmp/**
tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
/src/main/resources/rebel.xml
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath

Gefunden auf
http://bmchild.blogspot.co.at/2012/06/git-ignore-for-java-eclipse-project.html