J'essaie d'utiliser cuda avec la bibliothèque GNU de précision multiple (gmp). Lorsque j'ajoute des instructions gmp comme mpf_init() à mon code de périphérique, j'obtiens cette erreur de compilation: tlgmp.cu (37): error: appelle une fonction hôte ("__ gmpf_init") depuis une fonction __ device__/__ global__ ("histo") n'est pas autorisé.lien cuda avec gmp
Est-il possible de redéfinir les instructions gmp afin qu'elles puissent être utilisées dans le code de l'appareil?
pas au niveau de la bibliothèque, non. La bibliothèque est compilée pour x86 et n'inclut pas les fonctions compilées pour l'exécution sur le périphérique. Comme il est open source, il devrait être possible de parcourir la bibliothèque de fonctions au niveau de la source et de créer une nouvelle bibliothèque (ou toute autre fonction dont vous avez besoin) remplie avec les décorations __ host__ __ device__ et éventuellement d'autres changements, passez ce code via nvcc pour générer des fonctions appelables par le périphérique. –
Juste googling autour, [cette bibliothèque CUMP] (http://www.hpcs.cs.tsukuba.ac.jp/~nakayama/cump/) a surgi quand j'ai google gmp cmp. Peut être intéressant de jeter un coup d'oeil. –
J'ai déjà trouvé cette bibliothèque moi-même et jeté un coup d'oeil au fichier exemple axpy.cu. Cet exemple inclut gmp.h et utilise également les instructions gmp standard dans le code de périphérique (mpf_mul(), mpf_add()). Par conséquent, il devrait produire le même message d'erreur à moins que l'auteur n'ait utilisé une version modifiée de la bibliothèque gmp. –