2011-08-09 4 views
1

Je me demande si le cache L2 est libéré entre plusieurs appels de noyau. Par exemple, j'ai un noyau qui effectue un pré-traitement sur les données et le second qui l'utilise. Est-il possible d'obtenir de meilleures performances si la taille des données est inférieure à 768 Ko? Je ne vois aucune raison pour que les gars de NVidia l'implémentent autrement mais peut-être que je me trompe. Est-ce que quelqu'un a une expérience avec ça?NVidia CUDA: cache L2 et plusieurs appels de noyau

Répondre

1

En supposant que vous parlez de cache de données L2 dans Fermi.

Je pense que les caches sont vidées après chaque invocation du noyau. Dans mon expérience, l'exécution de deux lancements consécutifs du même noyau avec beaucoup d'accès mémoire (et # manque de cache L2) n'apporte pas de changements substantiels aux statistiques de cache L1/L2. Dans votre problème, je pense, en fonction de la dépendance des données, il est possible de mettre deux étapes dans un noyau (avec une certaine synchronisation) afin que la deuxième partie du noyau puisse réutiliser les données traitées par la première partie.

Voici une autre astuce: Vous savez que le gpu a, par exemple N SM, vous pouvez effectuer la première partie en utilisant les premiers blocs N * M1. Les prochains blocs N * M2 pour la deuxième partie. Assurez-vous que tous les blocs de la première partie se terminent en même temps (ou presque) en utilisant la synchronisation. D'après mon expérience, l'ordre de programmation des blocs est vraiment déterministe.

Espérons que ça aide.

Questions connexes