J'ai une fonction du noyau (shader de calcul) qui lit les pixels proches d'un pixel à partir d'une texture et sur la base des anciennes valeurs de pixels proches met à jour la valeur du pixel courant (ce n'est pas une simple convolution).iOS Metal - lire les anciennes valeurs tout en écrivant dans la texture
J'ai essayé de créer une copie de la texture en utilisant BlitCommandEncoder
et en alimentant la fonction noyau avec 2 textures - une en lecture seule et une autre en écriture seule. Malheureusement, cette approche nécessite beaucoup de temps pour le GPU. Quelle est la manière la plus efficace (GPU et mémoire) de lire les anciennes valeurs d'une texture tout en mettant à jour son contenu?
Avez-vous profilé votre application avec Time Profiler (dans les instruments) et GPU Frame Capture (dans Xcode)? Déterminer combien de temps vous consacrez l'allocation des ressources, la copie et l'exécution de votre noyau vous aidera à déterminer ce qu'il faut optimiser en premier. – warrenm
@warrenm Merci de votre réponse. Il s'avère que la routine travaillant avec le 'BlitCommandEncoder' faisait appel à une autre fonction, qui prenait beaucoup de temps, ce qui causait le retard, les opérations Blit n'étaient pas la principale source de retard - c'était de ma faute. Cependant, en regardant dans GPU Frame Capture, j'ai trouvé qu'il n'y a pas mentionné la durée des opérations Blit (par opposition aux opérations de calcul) - est-il impossible de les mesurer (ou ai-je oublié quelque chose)? – sarasvati
Je ne pense pas qu'il existe actuellement un moyen de capturer des durées de codage de calcul dans GPU Frame Capture, désolé. – warrenm