Je tente d'écrire un système de particules simple qui utilise CUDA pour effectuer la mise à jour des positions des particules. En ce moment je définis une particule avec un objet avec une position définie avec trois valeurs flottantes, et une vitesse également définie avec trois valeurs flottantes. Lors de la mise à jour des particules, j'ajoute une valeur constante à la composante Y de la vitesse pour simuler la gravité, puis j'ajoute la vitesse à la position actuelle pour trouver la nouvelle position. En termes de gestion de la mémoire, il est préférable de maintenir deux tableaux de flottants séparés pour stocker les données ou pour les structurer de manière orientée objet. Quelque chose comme ceci:Comment structurer les données pour une vitesse optimale dans une application CUDA
struct Vector
{
float x, y, z;
};
struct Particle
{
Vector position;
Vector velocity;
};
Il semble que la taille des données est le même que soit la méthode (4 octets par flotteur, 3 flotteurs par vecteur, 2 vecteurs par particule totalisant au total 24 octets) Il semble que le OO Cette approche permettrait un transfert de données plus efficace entre le CPU et le GPU car je pourrais utiliser une seule instruction de copie mémoire au lieu de 2 (et à long terme plus, car il y a quelques autres informations sur les particules qui deviendront pertinentes, comme Age , Durée de vie, poids/masse, température, etc) Et puis il ya aussi juste la lisibilité simple du code et la facilité de traiter avec cela qui me fait aussi incliner vers l'approche OO. Mais les exemples que j'ai vus n'utilisent pas de données structurées, donc je me demande s'il y a une raison. Donc, la question est de savoir lequel est le meilleur: tableaux individuels de données ou d'objets structurés?
Err .. pourquoi ne pas essayer? –
Lol. Parce que je m'intéresse à la théorie, même si je trouve que l'un fonctionne mieux que l'autre, je veux toujours savoir pourquoi. –