Estou interessado em estabelecer cálculos para verificar se um critério de distância é atendido: ou seja, a distância entre um vetor vetor x j deve ser menor que algum valor r m a x . Meus dados são particionados de acordo com uma grade ortogonal de coordenadas. Como meu ponto de corte é menor que a distância entre os pontos finais das coordenadas do vizinho mais próximo, gostaria de adicionar uma variável "octant" para verificar se as coisas estão configuradas corretamente:
if octant[j] in allowed_list continue
como um "curto-circuito" para
if dist(x[i], x[j]) < r_max
Minha pergunta é: qual é a eficiência computacional das pesquisas e comparações booleanas em relação às operações de ponto flutuante? Vale a pena fazer isso nas arquiteturas modernas?
efficiency
aeismail
fonte
fonte
Respostas:
Minha regra geral é que, se você puder calcular alguma quantidade com eficiência (boa utilização da FPU) em menos de 50 flops por valor de precisão dupla, é melhor recalcular do que armazenar. A tendência, que é constante há décadas, é que a capacidade do ponto flutuante melhore mais rapidamente do que o desempenho da memória e provavelmente não cederá devido a restrições físicas e requisitos de energia da memória rápida. O valor de 50 é da magnitude certa para todas as plataformas de computação populares (Intel / AMD, Blue Gene e GPUs).
Estimativas de custo aproximadas por núcleo
[diretrizes para máquinas baseadas em Intel e AMD 2011/2012]
MPI_Allreduce
Leitura adicional
fonte