2013-07-01 2 views
4

J'utilise fréquemment l'arithmétique complexe dans CUDA et j'ai besoin de définir mes propres implémentations, par exemple, de fonctions transcendantes (sin, cos, exp, ...) sur des nombres complexes. Je veux maintenant résoudre définitivement le problème en écrivant une bibliothèque de telles fonctions afin de considérer un "grand" nombre de cas et en évitant d'être arrêté à tout moment pour de nouvelles implémentations. Je suis conscient que pour certains d'entre eux, l'écriture de code pourrait être non triviale du point de vue du compromis entre précision et complexité de calcul. Néanmoins, je suis également conscient que C++ a son propre complex math library.Arithmétique complexe dans CUDA

Y a-t-il une possibilité de "recycler" des solutions C++ déjà existantes à des fins CUDA?

+0

Nous avons partagé une bibliothèque de fonctions '__device__' et d'opérateurs sur des nombres complexes à [CUDA Complex Library Download Page] (http://www.orangeowlsolutions.com/bluebird) incluant les fonctions suivantes:' real', 'imag ',' abs', 'angle',' conj', 'log',' log10', 'polaire',' sqrt', 'sin',' cos', 'tan',' exp', 'pow', «asinh», «acosh», «atanh», «sinh», «cosh», «tanh», «asin», «atan», «acos». Dans le fichier compressé téléchargeable, il existe un répertoire Stand-Along Complex ainsi qu'un exemple d'utilisation de Visual Studio. Nous espérons que cela pourrait être utile à la communauté. Bien sûr, toute critique sera la bienvenue :-) – JackOLantern

Répondre

1

Probablement vous avez déjà trouvé la réponse, mais voici la mienne:

Il y a possibilité de "recycler" sources for complex C++ ISO library

UPD:

CUDA liés: cusp::complex< float > Struct Template Reference

Je pense que vous pouvez essayez de collaborer avec l'auteur de:

an implementation of C++ std::complex for CUDA devices (i.e. compiles with nvcc)

+0

Merci pour votre réponse. D'un coup d'oeil rapide à la bibliothèque que vous avez indiquée, je ne serais pas sûr que la [implémentation] (http://gcc.gnu.org/onlinedocs/gcc-4.6.3/libstdc++/api/a00813_source.html) semble s'appuyer sur les fonctions intégrées ... – JackOLantern

+0

Intégré où? En CPU/GPU? Pouvez-vous donner un exemple sur les fonctions intégrées sur lesquelles vous voulez compter? – Rodion

+1

Regardez ce [fichier source] (http://gcc.gnu.org/onlinedocs/gcc-4.6.3/libstdc++/api/a00813_source.html#l00258). La définition de 'asin' repose sur une fonction' __builtin_casinf'. En face de cela, je veux me fier aux fonctions intégrées de CUDA sur de vrais arguments et les étendre au cas complexe. – JackOLantern