2 votes

Trop longue attente pour la clôture

Je suis en train d'utiliser Vulkan avec C# et Silk.net. Et je ne comprends pas pourquoi cela prend autant de temps pour compléter même de petites files de commandes. Merci de regarder cette chronologie du CPU:

entrer la description de l'image ici

Comme vous pouvez le voir, il y a des attentes très longues, alors que les temps de travail du GPU sont courts:

entrer la description de l'image ici

Je comprends qu'il n'est pas efficace d'attendre les barrières. Mais il y a quelque chose d'étrange, je pense. Quand c'était OpenGL, il était possible de synchroniser le CPU et le GPU après chaque dessin. Même avec différents shaders, textures, et beaucoup de travail. Donc, cela doit être possible sans une telle attente.

S'agit-il d'un bug ou d'un comportement normal pour Vulkan?

5voto

Nicol Bolas Points 133791

Vulkan ne spécifie pas le comportement en termes de timing. Ceci n'est donc ni un "bug" ni "normal". Les questions de performance de ce genre ne relèvent pas de la définition de l'API. Elles relèvent plutôt d'une attente raisonnable vis-à-vis d'un système.

Les délais dont vous parlez semblent être de l'ordre de dizaines de millisecondes. Ce n'est pas entièrement déraisonnable en termes de surcharge pour attendre sur une barrière non signalée. Il n'est pas raisonnable de s'attendre à ce que le thread CPU soit réveillé instantanément dès la fin de l'opération GPU sur laquelle on attend.

Attendre sur une barrière non signalée ne devrait se produire que si le CPU dépasse le GPU. Vous devriez seulement vérifier une barrière d'une image précédente, et seulement si vous avez besoin d'utiliser certaines ressources mémoire ou des images de swapchain utilisées par cette image. Et si elle est toujours non signalée, allez faire tout le travail CPU que vous pouvez qui ne nécessite pas l'utilisation de ces ressources. Seulement quand vous n'avez plus d'autre travail à faire devriez-vous réellement attendre sur la barrière avec un temps non nul.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X