2010-10-14 9 views
11

Je n'arrive pas à trouver une réponse à cette question simple dans le Guide de programmation Cuda: Lors de la compilation d'un noyau avec nvcc, quelle taille entière est déclarée par short, int, long et longtemps long? Cela dépend-il de mon architecture hôte, donc je devrais utiliser int16_t, int32_t, et int64_t, ou est-ce toujours une taille fixe?Quelle est la taille des entiers lors de la programmation des noyaux cuda

Répondre

10

Cela dépend du compilateur hôte. Plus précisément, la définition de ces types de nvcc sera en accord avec la représentation du compilateur hôte.

En pratique, le char, short et int types de données ont des tailles prévisibles sur toutes les plates-formes de soutien CUDA (8, 16, et 32 ​​bits respectivement). Cependant, la taille de long varie d'une plateforme à l'autre.

+1

Etes-vous sûr que c'est correct? Le code de l'appareil doit être converti en commandes ptx. Ce serait bizarre si ce processus était spécifique à l'architecture de l'hôte. J'ai regardé dans les docs de CUDA et n'ai pas pu trouver n'importe quoi. – nsanders

+2

Oui, les types de données de périphérique doivent correspondre aux types d'hôte, sinon il serait impossible de prédire la quantité de memcpy à effectuer sur l'hôte. – Edric

+0

Merci. C'est exactement ce dont j'avais besoin. Cela a du sens car ce serait un cauchemar si j'étais responsable de faire correspondre les types entre mon code hôte et mon code noyau. –