J'ai travaillé avec OpenCL sur quelques projets, mais j'ai toujours écrit le noyau comme une fonction (parfois assez grande). Maintenant, je travaille sur un projet plus complexe et j'aimerais partager des fonctions sur plusieurs noyaux. Mais les exemples que je peux trouver tous montrent le noyau comme un seul fichier (très peu appellent même des fonctions secondaires). Il semble qu'il devrait être possible d'utiliser plusieurs fichiers - clCreateProgramWithSource()
accepte plusieurs chaînes (et les combine, je suppose) - bien que Program()
de pyopencl ne prenne qu'une seule source.Comment structurer les grands noyaux OpenCL?
Je voudrais entendre parler de quelqu'un avec l'expérience de faire ceci:
- Y a-t-il des problèmes associés aux fichiers sources multiples?
- Est-ce que la meilleure solution pour pyopencl consiste simplement à concaténer des fichiers?
- Existe-t-il un moyen de compiler une bibliothèque de fonctions (au lieu de passer dans la source de la bibliothèque avec chaque noyau, même si tous ne sont pas utilisés)?
- S'il est nécessaire de transmettre la source de la bibliothèque à chaque fois, les fonctions inutilisées sont-elles supprimées (pas de surcharge)?
- Autres bonnes pratiques/suggestions?
Merci.
Vous pouvez créer un fichier de concaténation aveC#include "part1.cl" #include "part2.cl". Cela fonctionne pour moi (compilateur NVidia), bien que probablement tout est compilé chaque fois que l'application fonctionne. Je pense qu'avoir une bibliothèque de fonctions précompilées est un peu de science fiction, car le code de fonction est incorporé dans chaque noyau (c'est pourquoi vous ne pouvez pas écrire de fonctions récursives). –