Le calcul sur la carte

L'advection des débris, celle qui décide où le vent porte chaque planche et chaque bloc arraché, part sur la carte graphique par OpenCL. Elle tourne exactement de la même façon sur un serveur dédié que sur un client, parce que c'est le serveur qui simule le monde: sans carte compatible en face, le calcul retombe sur le processeur et rend le même résultat, à la tolérance près que le test de parité impose entre les deux chemins.

Ce que chaque réglage du calcul accepte
AttributMinMax
gpuDeviceIndex-163
gpuWorkgroupSize01024
advectionThreads064
advectionBatch641048576

Le noyau fait avancer exactement l'équation décrite sur la page du champ de vent, juste sur un autre silicium: Le champ de vent

Choisir un périphérique

Chaque plateforme OpenCL est passée en revue au démarrage, et parmi les cartes trouvées, seules celles qui savent faire du double précision sont retenues: le calcul suit la même équation que le processeur à la même tolérance, ce qu'une carte en simple précision ne peut pas tenir sur les coordonnées d'un monde Minecraft. Le nom affiché dans le journal vient si possible de l'extension de plaquette d'AMD, valeur 0x4038, plutôt que du nom d'architecture générique que la carte donnerait sinon.

Sans double précision, une carte n'existe pas pour ce calcul. Une carte listée par le pilote mais sans l'extension cl_khr_fp64 est écartée avant même que le programme ne soit compilé, même si c'est la seule carte du poste: le calcul passe alors sur le processeur sans qu'aucun message d'erreur ne le signale ailleurs que dans cette ligne du journal.

Quand l'aller-retour se justifie

En dessous de count >= 64, l'envoi n'est même pas tenté: deux téléversements et une lecture ont un coût fixe qu'un petit paquet de débris ne rembourse jamais. Trois échecs de suite écartent la carte pour le reste du lancement plutôt que de retenter à chaque tick, et tout ce qu'elle avait en cours retombe sur le chemin processeur, qui produit la même suite d'états que si la carte n'avait jamais existé.

Les cinq réglages

Groupe compute, vu depuis le calcul plutôt que depuis le fichier
RéglageDescriptionDéfaut
useGpuInterrupteur général. À faux, l'advection entière tient sur le processeur pour toute la session.true
gpuDeviceIndexRang dans la liste des périphériques OpenCL trouvés au démarrage. Négatif laisse le mod choisir, qui prend le plus large des cartes AMD visibles.-1
gpuWorkgroupSize / advectionThreadsDeux réglages secondaires que la plupart laissent tel quel, tous deux dans ComputeConfig: à zéro, l'un laisse le pilote choisir la largeur de groupe que la carte préfère, l'autre laisse le pool processeur se tailler sur le nombre de cœurs moins deux.0 / 0
advectionBatchDébris confiés à un seul envoi. C'est le chiffre qui décide si un tick franchit le seuil de soixante-quatre fixé par ComputeConfig.4096