Coin-OR-Tools - Blis

klimaschreck

Well-Known Member
Hallo zusammen,

kennt sich jemand mit den Coin-OR-Tools, speziell Blis aus? Ich möchte sie auf FBSD installieren. Für den Parallelbetrieb ist MPI notwendig. Ich sah, dass openmpi in den Ports ist. Ist das ausreichend für Blis?

Noch eine andere Frage: Wisst ihr, wie man sich nach der Optimierung eine detaillierte Lösung (Variablennamen und Werte) ausgeben lassen kann?
 
Also ich kenne diese Applikation jetzt nicht, aber wenn du dich allgemein auf die Performance beziehst, dann steht OpenMPI auf FreeBSD in nichts den anderen Plattformen nach. Die einzige Schande ist, das FreeBSD keinen (freien) IB Stack hat. :/

Ich hab im wiki mal grob skizziert, wie das mit HPL funktioniert. Eigentlich wollte ich den Artikel auch mal auf andere numerische Applikationen ausweiten, aber ich bin bis jetzt noch nicht dazu gekommen:
http://wiki.bsdforen.de/howto/mpi
 
Perforrmance von MPI bzw. OpenMPI ist mir zweitrangig. Ich knabbere momentan auch an der Installation. In einer Seite habe ich die folgende Zeile zum Konfigurieren entdeckt:

Code:
./configure --enable-static --disable-shared --with-mpi-incdir=/usr/local/mpich/include --with-mpi-lib='-L/usr/local/mpich/lib  -lmpich' MPICC=mpicc MPICXX=mpiCC

Ich habe da Umsetzungen vorgenommen:
Code:
/usr/local/mpich/include -> /usr/local/mpi/openmpi/include

Code:
'-L/usr/local/mpich/lib -lmpich' -> '-L/usr/local/mpi/openmpi/lib -lopenmpi

MPICC und MPICXX habe ich gleich gelassen. Leider hat es nicht geklappt.

Es erscheint die Fehlermeldung:
Code:
mpicc: not found

Habt ihr vielleicht Tipps?
 
Zuletzt bearbeitet:
Versuch mal absolute Pfade, weil in der Regel /usr/local/mpi/openmpi/bin nicht drin ist im Pfad, also:
/usr/local/mpi/openmpi/bin/mpicc
 
danke für den Tipp, jetzt bin ich schon ein Schritt weiter, aber leider noch nicht am Ziel. Es kommt nun die Fehlermeldung:

Code:
checking whether symbol MPI_Irecv is available with MPI ... no
configure: error: Cannot find symbol(s) MPI_Irecv

Muss ich dann noch auf MPI (original) zurückgreifen?
 
Das sieht so aus als hättest du nicht die richtige Bibliothek angegeben. Denn OpenMPI verfügt über Irecv.
Könntest du vllt mal das config.log irgendwo in einem nopaste zeigen? Oder einen Download Link zu dem Programm, dann kann ich das mal ausprobieren, aber erst heute Abend irgendwann.
 
vielen Dank, dass du dir das noch einmal anschauen willst

Ich vermute aber, dass mein Aufruf falsch war:

Code:
./configure --enable-static --disable-shared --with-mpi-incdir=/usr/local/mpi/openmpi/include --with-mpi-lib='-L/usr/local/mpi/openmpi/lib -lopenmpi' MPICC=/usr/local/mpi/openmpi/bin/mpicc MPICXX=/usr/local/mpi/openmpi/bin/mpiCC

In dem einen configure.log steht nämlich:

Code:
/usr/bin/ld: cannot find -lopenmpi

Im Aufruf hatte ich aus -lmpich einfach -lopenmpi gemacht. Ich vermute, dass das mein Fehler war.
 
ja, das war genau richtig. Jetzt läuft configure auch durch.

Aber nun gibt es Fehler bei make. Einen habe ich schon behoben durch Einfügen von include <stdio.h>. An dem nächsten knabbere ich noch:

Code:
In file included from /usr/local/mpi/openmpi/include/mpi.h:1886,                                                                                                       
                 from AlpsTime.h:37,                                                                                                                                   
                 from AlpsKnowledgeBroker.h:43,                                                                                                                        
                 from AlpsKnowledgeBroker.cpp:24:                                                                                                                      
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h: At global scope:                                                                                         
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:53: error: 'SEEK_SET' was not declared in this scope                                                      
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:54: error: 'SEEK_CUR' was not declared in this scope                                                      
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:55: error: 'SEEK_END' was not declared in this scope                                                      
In file included from AlpsKnowledge.h:31,                                                                                                                              
                 from AlpsSubTree.h:33,                                                                                                                                
                 from AlpsSearchStrategy.h:27,                                                                                                                         
                 from AlpsKnowledgeBroker.h:33,                                                                                                                        
                 from AlpsKnowledgeBroker.cpp:24:                                                                                                                      
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T*, int) [with T = bool]':                                                                 
AlpsParams.h:342:   instantiated from here                                                                                                                             
AlpsEncoded.h:191: warning: conversion to 'int' from 'long unsigned int' may alter its value                                                                           
AlpsEncoded.h:193: warning: conversion to 'int' from 'long unsigned int' may alter its value                                                                           
AlpsEncoded.h:196: warning: conversion to 'int' from 'long unsigned int' may alter its value                                                                           
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T*, int) [with T = int]':
AlpsParams.h:343:   instantiated from here
AlpsEncoded.h:191: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:193: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:196: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T*, int) [with T = double]':
AlpsParams.h:344:   instantiated from here
AlpsEncoded.h:191: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:193: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:196: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T&) [with T = size_t]':
AlpsParams.h:348:   instantiated from here
AlpsEncoded.h:166: warning: conversion to 'int' from 'long unsigned int' may alter its value
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h: At global scope:
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:255: warning: 'MPI::SEEK_SET' defined but not used
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:256: warning: 'MPI::SEEK_CUR' defined but not used
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:257: warning: 'MPI::SEEK_END' defined but not used
*** Error code 1

Stop in /usr/local/src/Blis-0.91.1/Alps/src.
 
Ich wundere mich auch über den Abbruch, da ich keinen Fehler finden konnte.

Ich habe nun make >1 2>&1 aufgerufen und poste nun die komplette Datei.

Code:
if /bin/sh ../../libtool --tag=CXX --mode=compile /usr/local/mpi/openmpi/bin/mpiCC -DHAVE_CONFIG_H  -I. -I`echo .` -I../inc  -I`echo /usr/local/src/Blis-0.91.1/CoinUtils/src` -I`echo  /usr/local/src/Blis-0.91.1/Alps/../CoinUtils/inc` -I`echo /usr/local/mpi/openmpi/include`    -O3 -fomit-frame-pointer -pipe -DNDEBUG  -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -MT AlpsKnowledgeBroker.lo -MD -MP -MF ".deps/AlpsKnowledgeBroker.Tpo" -c -o AlpsKnowledgeBroker.lo AlpsKnowledgeBroker.cpp;  then mv -f ".deps/AlpsKnowledgeBroker.Tpo" ".deps/AlpsKnowledgeBroker.Plo"; else rm -f ".deps/AlpsKnowledgeBroker.Tpo"; exit 1; fi
 /usr/local/mpi/openmpi/bin/mpiCC -DHAVE_CONFIG_H -I. -I. -I../inc -I/usr/local/src/Blis-0.91.1/CoinUtils/src -I/usr/local/src/Blis-0.91.1/Alps/../CoinUtils/inc -I/usr/local/mpi/openmpi/include -O3 -fomit-frame-pointer -pipe -DNDEBUG -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -MT AlpsKnowledgeBroker.lo -MD -MP -MF .deps/AlpsKnowledgeBroker.Tpo -c AlpsKnowledgeBroker.cpp -o AlpsKnowledgeBroker.o
In file included from AlpsKnowledgeBroker.h:31,
                 from AlpsKnowledgeBroker.cpp:24:
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinMessageHandler.hpp: In member function 'int CoinMessageHandler::intValue(int) const':
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinMessageHandler.hpp:404: warning: conversion to 'int' from 'const long int' may alter its value
In file included from AlpsKnowledge.h:31,
                 from AlpsSubTree.h:33,
                 from AlpsSearchStrategy.h:27,
                 from AlpsKnowledgeBroker.h:33,
                 from AlpsKnowledgeBroker.cpp:24:
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(std::string&)':
AlpsEncoded.h:282: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:284: warning: conversion to 'int' from 'long unsigned int' may alter its value
In file included from AlpsHelperFunctions.h:31,
                 from AlpsNodePool.h:28,
                 from AlpsSubTree.h:34,
                 from AlpsSearchStrategy.h:27,
                 from AlpsKnowledgeBroker.h:33,
                 from AlpsKnowledgeBroker.cpp:24:
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp: In function 'double CoinGetTimeOfDay()':
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp:71: warning: conversion to 'double' from 'suseconds_t' may alter its value
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp:71: warning: conversion to 'double' from 'time_t' may alter its value
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp: In function 'double CoinCpuTime()':
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp:129: warning: conversion to 'double' from 'time_t' may alter its value
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp: In function 'double CoinSysTime()':
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp:151: warning: conversion to 'double' from 'time_t' may alter its value
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp: In function 'double CoinCpuTimeJustChildren()':
/usr/local/src/Blis-0.91.1/CoinUtils/src/CoinTime.hpp:171: warning: conversion to 'double' from 'time_t' may alter its value
In file included from /usr/local/mpi/openmpi/include/mpi.h:1886,
                 from AlpsTime.h:37,
                 from AlpsKnowledgeBroker.h:43,
                 from AlpsKnowledgeBroker.cpp:24:
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h: At global scope:
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:53: error: 'SEEK_SET' was not declared in this scope
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:54: error: 'SEEK_CUR' was not declared in this scope
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:55: error: 'SEEK_END' was not declared in this scope
In file included from AlpsKnowledge.h:31,
                 from AlpsSubTree.h:33,
                 from AlpsSearchStrategy.h:27,
                 from AlpsKnowledgeBroker.h:33,
                 from AlpsKnowledgeBroker.cpp:24:
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T*, int) [with T = bool]':
AlpsParams.h:342:   instantiated from here
AlpsEncoded.h:191: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:193: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:196: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T*, int) [with T = int]':
AlpsParams.h:343:   instantiated from here
AlpsEncoded.h:191: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:193: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:196: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T*, int) [with T = double]':
AlpsParams.h:344:   instantiated from here
AlpsEncoded.h:191: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:193: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h:196: warning: conversion to 'int' from 'long unsigned int' may alter its value
AlpsEncoded.h: In member function 'AlpsEncoded& AlpsEncoded::writeRep(const T&) [with T = size_t]':
AlpsParams.h:348:   instantiated from here
AlpsEncoded.h:166: warning: conversion to 'int' from 'long unsigned int' may alter its value
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h: At global scope:
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:255: warning: 'MPI::SEEK_SET' defined but not used
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:256: warning: 'MPI::SEEK_CUR' defined but not used
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:257: warning: 'MPI::SEEK_END' defined but not used
*** Error code 1

Stop in /usr/local/src/Blis-0.91.1/Alps/src.

Mehr steht da nicht. Ich werde aus dem Abbruch nicht schlau.
 
Pfui... das ist ein Bug in mpi mit cpp, weil er SEEK_XXX in stdio.h und mpi.h definiert.

Das kann man aber umgehen: Also mach deine Änderungen an den Dateien wieder rückgängig, und füge ein
Code:
CXXFLAGS="-DOMPI_IGNORE_CXX_SEEK"
an. Dann muss du aber die configure Hölle nochmal laufen lassen.
 
ich habe es so gemacht, wie du geschrieben hast. In den Makefiles ist nun der Wert bei CXXFLAGS eingetragen. Allerdings stoppt make wieder beim ersten Fehler:

Anbei der Output von make

Code:
Making all in src
if /bin/sh ../../libtool --tag=CXX --mode=compile /usr/local/mpi/openmpi/bin/mpiCC -DHAVE_CONFIG_H  -I. -I`echo .` -I../inc      -DOMPI_IGNORE_CXX_SEEK -MT CoinParam.lo -MD -MP -MF ".deps/CoinParam.Tpo" -c -o CoinParam.lo CoinParam.cpp;  then mv -f ".deps/CoinParam.Tpo" ".deps/CoinParam.Plo"; else rm -f ".deps/CoinParam.Tpo"; exit 1; fi
 /usr/local/mpi/openmpi/bin/mpiCC -DHAVE_CONFIG_H -I. -I. -I../inc -DOMPI_IGNORE_CXX_SEEK -MT CoinParam.lo -MD -MP -MF .deps/CoinParam.Tpo -c CoinParam.cpp -o CoinParam.o
In file included from CoinParam.cpp:12:
CoinParam.hpp:449: error: variable or field 'setInputSrc' declared void
CoinParam.hpp:449: error: 'FILE' was not declared in this scope
CoinParam.hpp:449: error: 'src' was not declared in this scope
*** Error code 1

Stop in /usr/local/src/Blis-0.91.1/CoinUtils/src.
*** Error code 1

Stop in /usr/local/src/Blis-0.91.1/CoinUtils.

Anbei noch die entsprechende hpp-Datei

Das Source-Pakete zur Optimierung habe ich http://www.coin-or.org/download/source/Blis/ geladen.
 

Anhänge

Du hast da wohl irgendwo ein stdio.h zu viel weggehauen. Ich würde vorschlagen du löschst nochmal alles und startest von vorn. Ich habs gerade mal runtergeladen und ein:
Code:
./configure --enable-static --disable-shared --with-mpi-incdir=/usr/local/mpi/openmpi/include --with-mpi-lib='-L/usr/local/mpi/openmpi/lib  -lmpi' MPICC=mpicc MPICXX=mpiCC CXXFLAGS="-DOMPI_IGNORE_CXX_SEEK"
gestartet (ich hab /usr/local/mpi/openmpi/bin in $PATH) und anschließend ein make. Da ist er ohne Probleme durchgelaufen.
 
hm, ich habe alles gelöscht und wieder neu gestart. Der gleiche Fehler blebt. Ich kann mir das jetzt nur noch dadurch erklären, dass ich eine ältere Version von openmpi (1.3.3_1) installiert habe. Vielleicht ist der Fehler weg, wenn ich auf 1.4 upgrade
 
Also ich hab die Zeile, die den Fehler auslöst bei mir mal probiert und die geht so einwandfrei. Auch auf meiner Bastelkiste und da habe ich die selbe mpi version. Es hat wie gesagt was damit zu tun, das es zwei mögliche Stellen gibt wo SEEK_* definiert wurde. Es gibt das einmal in mpicxx.h und einmal natürlich in stdio.h
 
ich verstehe das nicht. Ich habe das src Verzeichnis komplett gelöscht. Es gibt keine Änderungen von mir bei blis.

Ich habe auch die aktuellste Version von openmpi eingespielt

Aber trotzdem taucht der Fehler weiterhin auf. Muss ich vielleicht noch die Suchreihenfolge in Pfaden ändern?
 
Hast du den kompletten Blis-0.91.1 Ordner gelöscht, neu ausgepackt und anschließend die configure Hölle von neuem gestartet gestartet?

Welche Version hast du von Blis genommen? 0.91.1?
 
ich habe blis-0.91.1 als zip heruntergeladen (das gz funktionierte nicht)
ich habe den Ordner komplett gelöscht und dann configure gestart, das allerdings nur einmal aus dem Hauptverzeichnis. Das ging relativ schnell. Danach habe ich make aufgerufen.
 
Das hab ich auch genommen. Sehr komisch das ganze. Eigentlich sollte das gehen.

Du könntest mal versuchen in das Verzeichnis "CoinUtils/src" zu gehen und dann
/usr/local/mpi/openmpi/bin/mpiCC -DHAVE_CONFIG_H -I. -I. -I../inc -DOMPI_IGNORE_CXX_SEEK -MT CoinParam.lo -MD -MP -MF .deps/CoinParam.Tpo -c CoinParam.cpp -o CoinParam.o
manuell aufzurufen. Einmal mit -DOMPI... und ein mal ohne. Vllt liefert das noch etwas.
 
ich den Befehl in beiden Varianten ausprobiert. Es gibt immer wieder den gleichen Fehler.

Ich bin jetzt hingegangen und habe im Verzeichnis

Code:
/usr/local/mpi/openmpi/include/openmpi/ompi/mpi/cxx

die Datei mpicxx.h in mpicxx.h.weg umbenannt. Er kann sie nun nicht mehr finden. Wieder die gleiche Prozedur: alles Löschen, configure, make. Es bleibt
der gleiche Fehler. Dies deutet darauf hin, dass er die mpicxx.h Datei gar nicht vermisst, also auch nicht verwendet. Muss ich noch irgendwelche Pfade anpassen?
 
ich habe als Nächstes die mpicxx.h Datei wieder in ihren früheren Namen umbenannt und sie als include in CoinParam.hpp eingegeben. Es kam wieder zum gleichen Fehler.

Wenn ich nun aber statt mpicixx.h neu stdio.h einfüge, kompiliert es durch, sogar komplett durch. make test gibt allerdings einen Fehler.

Code:
hubNum_ <= 0

BLIS ERROR: "hubNum_ <= 0"
        from function "initSearch"
        from class "AlpsKnowledgeBrokerMPI"

Meine Frage ist nun, ob dies ein Fehler ist, der schon immer beim Test aufgetreten ist oder nur bei mir, weil ich mit stdio.h reingepfuscht habe.
 
Kann ich jetzt nicht reproduzieren. Das sieht aber so aus als hätte er das falsch gestartet. OpenMPI funktioniert etwas anders als mpich. Ich würde einfach ein make install machen und gucken ob es so läuft.
 
Zurück
Oben