Moin,
ich hab heute das erste mal versucht die binomial_coefficient Funktion aus der Boost.Math Bibliothek zu verwenden und das ganze in einem CUDA-Projekt. D.h. der Aufruf an die Funktion liegt in einer *.cu-Datei. Leider hat das nicht funktioniert und es gab ne ganze Liste an Fehlermledungen mit fehlenden Typdefinitionen in irgendwelchen Boost-Headern. Mit googln habe ich dann herausgefunden, dass Boost manchmal gerne Probleme macht bzw. nvcc das nicht so sehr verkraftet. Da ich durch auslagern in eine .h/.cpp Datei den Fehler umgehen konnte hat das soweit wohl gepasst mit dem was andere auf google dazu gesagt haben.
Trotzdem heißt es auf google eigentlich, dass das eher ein Problem mit älteren CUDA und / oder Boost Versionen ist. Wie schon oben geschrieben verwende ich aber CUDA 9.0 und Boost 1.67 - bin also ziemlich aktuell unterwegs und habe trotzdem diese Probleme.
Da das ganze nicht mein Code ist sondern von jemandem anders muss das ganze wohl mal funktioniert haben. Daher die Frage ob jemand mit der Problematik vertraut ist und das gleiche Problem (oder vielleicht sogar eine Lösung) hat.
Der erste Typfehler tritt in MPL/if.hpp auf mit dem unbekannten Identifier "T3". Also eine typisch kryptische Template-Wahnsinn Fehlermeldung. Die Datei selber ist erreichbar sprich der Pfad dazu hin bekannt.
Ich weiß, dass man argumentieren kann, dass solch "Komplizierte" Aufrufe eigentlich nicht in eine CUDA-Datei gehören bzw. man das einfach strikt trennt, aber darum geht es mir hier explizit nicht. Prinzipiell sollte es nämlich doch möglich sein und mich interessiert hier auch aus Lerngründen der Fehler den ich habe. Das auslagern in eine .h/.cpp hat außerdem den unschönen Nachteil, dass das ganze für konkrete Typen spezialisiert werden muss, damit letztlich das Boost-Template nicht doch wieder einfach im *.cu eingebunden wird!
Gruß,
idk