Est-il possible de définir mes propres fonctions dans le code OpenCL, afin que les noyaux puissent les appeler? Oui, où puis-je voir un exemple simple?Fonctions en ligne définies par l'utilisateur OpenCL
Répondre
Sur la base des exemples de code here vous pouvez simplement écrire des fonctions telles que:
inline int add(int a,int b)
{
return a+b;
}
(Par exemple, regarde le fichier .cl dans les exemples de tri DXTC ou Bitonic..)
Je ne savoir si c'est une extension nvidia seulement mais la documentation OpenCL parle de "fonctions auxiliaires" ainsi que de noyaux.
Etrange, la spécification OpenCL ne dit rien sur __device – dmessf
Oui. Je me demandais si je me trompais. Ou si Apple l'a ajouté comme une extension. Donc, si vous me modifiez, modifiez-moi à nouveau jusqu'à ce qu'il soit testé :-) – sigfpe
Ou ... si je suis confus avec le code CUDA. J'ai joué avec les deux. – sigfpe
Fonction utilisée pour créer le programme est ...
cl_program clCreateProgramWithSource (
cl_context context,
cl_uint count,
const char **strings,
const size_t *lengths,
cl_int *errcode_ret)
Vous pouvez placer des fonctions à l'intérieur des paramètres chaînes comme celui-ci,
float AddVector(float a, float b)
{
return a + b;
}
kernel void VectorAdd(
global read_only float* a,
global read_only float* b,
global write_only float* c)
{
int index = get_global_id(0);
//c[index] = a[index] + b[index];
c[index] = AddVector(a[index], b[index]);
}
Maintenant, vous avez une fonction définie par l'utilisateur « AddVector » et une fonction du noyau "VectorAdd"
Je ai parcouru un peu autour, et je revenais juste à cette question :-PEn fin de compte, ce que j'ai fait était d'utiliser des macros, puisque inlining dépendrait de toute façon de l'implémentation, et les macros ne semblent pas avoir d'inconvénient majeur dans le contexte des programmes c99 OpenCL? par exemple:
#define getFilterBoardOffset(filter, inputPlane) \
((filter * gInputPlanes + inputPlane) * gFilterSizeSquared)
#define getResultBoardOffset(n, filter) \
((n * gNumFilters + filter) * gOutputBoardSizeSquared)
au lieu de:
inline float getFilterBoardOffset(float filter, int inputPlane) {
return (filter * gInputPlanes + inputPlane) * gFilterSizeSquared;
}
inline float getResultBoardOffset(float n, int filter) {
return (n * gNumFilters + filter) * gOutputBoardSizeSquared;
}
- 1. Fonctions définies localement par doctest
- 2. tsql fonctions définies par l'utilisateur
- 3. Fonctions SQLITE définies par l'utilisateur dans Lisp
- 4. Entity Framework - Fonctions définies par le modèle
- 5. Comment utiliser les fonctions définies par l'utilisateur?
- 6. Selenium RC fonctions définies par l'utilisateur
- 7. Liste des fonctions globales définies par l'utilisateur en JavaScript?
- 8. Comment définir des fonctions dans OpenCL?
- 9. Débogage des fonctions définies par l'utilisateur de PostgreSQL
- 10. Formules dans des fonctions définies par l'utilisateur dans R
- 11. Fonctions en ligne
- 12. Traitement des erreurs dans les fonctions définies par l'utilisateur
- 13. Fonctions redondantes & en ligne
- 14. Utilisation des fonctions définies par l'utilisateur dans Entity Framework
- 15. comment charger automatiquement des fonctions définies par l'utilisateur dans mathematica
- 16. Les fonctions d'agrégat définies par l'utilisateur les plus utiles
- 17. C++ fonctions en ligne
- 18. fonctions en ligne en C++
- 19. Comment déboguer des fonctions définies dynamiquement en Python?
- 20. IMAP activé, mais les fonctions non définies?
- 21. Conversions définies par l'utilisateur en C++
- 22. Formules définies par l'utilisateur en C#
- 23. Linux Interception de fonction pour OpenCL
- 24. Exemples OpenCL avec benchmarks
- 25. Fonctions définies par l'utilisateur SQL: Extraction des enregistrements TOP n dans une fonction définie par l'utilisateur
- 26. Une variable peut-elle contenir plusieurs enregistrements dans des fonctions définies par l'utilisateur dans MySQL?
- 27. comment appeler des fonctions définies par l'utilisateur qui renvoient un tableau type de données
- 28. Comment obtenir une liste de fonctions définies dans une DLL?
- 29. règles Surcharger pour définies par l'utilisateur littéraux en C++ 0x
- 30. Le framework Entity supporte les fonctions définies par l'utilisateur comme propriétés scalaires
question Old ... tout ce que vous avez besoin d'une réponse? –
On dirait que le titre et la question sont différents? Le titre demande spécifiquement 'inline', alors que la question demande simplement si nous pouvons définir nos fonctions ... –