I ont une structure alignée de 32 octets de 8 vecteurs qu'elle contient:Quand est-il correct de convertir en __m256 au lieu de charger?
struct ALIGN(32) Ray8
{
float x[8];
float y[8];
float z[8];
};
Lors de l'utilisation AVX2, je souhaite opérer sur ces éléments à l'unisson. Quand dois-je les charger explicitement en utilisant _mm256_load_ps() au lieu de les lancer? Par exemple, en utilisant la signature suivante:
void GenerateRayDirections(__m256 * x, _m256 * y, _m256 * z) { ... }
invoquée comme
void GenerateRayDirections((__m256*)ray.x, (__m256*)ray.y, (__m256*)ray.z);
J'utilise la bibliothèque de Embree d'Intel et ils ont une classe vfloat8 qui stocke en interne la représentation en tant que syndicat de _m256 et float8, donc il n'y a pas de casting du tout - mais il semble aussi n'y avoir aucun appel de charge. Si j'inclus les classes vfloat8 à la place:
void GenerateRayDirections(&ray.x.v, &ray.y.v, &ray.z.v);
Je cherche des conseils sur le moment de charger ou de lancer?
Chargez des vecteurs lorsque vous en avez besoin dans un vecteur et lancez-les quand vous voulez le concept de coulée, êtes-vous sûr de vouloir charger? Votre code de montage le prouve-t-il? – Martin