2012-11-17 2 views
3

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?

+0

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. –

+0

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. –

+0

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. –

Répondre

2

La bibliothèque GMP est compilée pour l'hôte et ne peut donc pas être utilisée directement dans le code de périphérique. C'est la raison directe de l'erreur que vous voyez. Comme il s'agit d'une bibliothèque open-source, il peut être possible de parcourir le code et de créer votre propre version, avec les décorateurs __device__ appropriés (et éventuellement d'autres modifications) aux différentes fonctions dont vous avez besoin. Cela nécessiterait probablement une quantité considérable de travail, cependant. Une autre alternative pourrait être d'étudier le CUMP library.

+0

Lien de travail pour CUMP: https://github.com/skystar0227/CUMP – masterxilo

+0

Une autre alternative est http://homepages.laas.fr/mmjoldes/campary/ – masterxilo