Je souhaite configurer des calculs pour vérifier si un critère de distance est satisfait: c'est-à-dire que la distance entre un vecteur et un vecteur d'anthère doit être inférieure à une valeur . Mes données sont partitionnées selon une grille orthogonale de coordonnées. Étant donné que ma coupure est plus petite que la distance entre les extrémités des coordonnées du plus proche voisin, j'aimerais ajouter une variable "octant" pour vérifier si les choses sont correctement configurées:x j r m a x
if octant[j] in allowed_list continue
comme un "court-circuit"
if dist(x[i], x[j]) < r_max
Ma question est: quelle est l'efficacité des recherches et des comparaisons booléennes par rapport aux opérations en virgule flottante? Cela vaut-il la peine de le faire sur les architectures modernes?
efficiency
aeismail
la source
la source
Réponses:
Ma règle générale est que si vous pouvez calculer une certaine quantité efficacement (bonne utilisation du FPU) en moins de 50 flops par valeur de double précision, il vaut mieux recalculer que stocker. La tendance, qui est constante depuis des décennies, est que la capacité en virgule flottante s'améliore plus rapidement que les performances de la mémoire, et ne risque pas de fléchir en raison des contraintes physiques et des besoins énergétiques de la mémoire rapide. La valeur de 50 est de la bonne ampleur pour toutes les plates-formes informatiques populaires (Intel / AMD, Blue Gene et GPU).
Estimation approximative des coûts par cœur
[directives pour les machines basées sur Intel et AMD 2011/2012]
MPI_Allreduce
(par exemple une norme ou un produit scalaire) sur une grande machineLectures complémentaires
la source