Estoy interesado en establecer cálculos para verificar si se cumple un criterio de distancia: es decir, la distancia entre un vector y otro vector x j debería ser menor que algún valor r m a x . Mis datos se dividen de acuerdo con una cuadrícula de coordenadas ortogonal. Dado que mi límite es menor que la distancia entre los puntos finales de las coordenadas vecinas más cercanas, me gustaría agregar una variable "octante" para verificar si las cosas están configuradas correctamente:
if octant[j] in allowed_list continue
como un "cortocircuito" para
if dist(x[i], x[j]) < r_max
Mi pregunta es: ¿cuán eficientes computacionalmente son las búsquedas y comparaciones booleanas en relación con las operaciones de punto flotante? ¿Vale la pena hacerlo en arquitecturas modernas?
efficiency
aeismail
fuente
fuente
Respuestas:
Mi regla general es que si puede calcular cierta cantidad de manera eficiente (buena utilización de la FPU) en menos de 50 flops por valor de doble precisión, es mejor volver a calcular que almacenar. La tendencia, que ha sido constante durante décadas, es que la capacidad de punto flotante mejore más rápido que el rendimiento de la memoria, y no es probable que ceda debido a las restricciones físicas y los requisitos de energía de la memoria rápida. El valor de 50 es de la magnitud adecuada para todas las plataformas informáticas populares (Intel / AMD, Blue Gene y GPU).
Costo aproximado estimado por núcleo
[directrices para las máquinas basadas en Intel y AMD 2011/2012]
MPI_Allreduce
Otras lecturas
fuente