Я заинтересован в настройке вычислений для проверки соответствия критерию расстояния: расстояние между вектором и вектором пыльника x j должно быть меньше некоторого значения r m a x . Мои данные разделены по ортогональной сетке координат. Поскольку моя отсечка меньше расстояния между конечными точками координат ближайшего соседа, я бы хотел добавить переменную «октант», чтобы проверить, правильно ли все настроено:
if octant[j] in allowed_list continue
как "короткое замыкание"
if dist(x[i], x[j]) < r_max
Мой вопрос: насколько вычислительно эффективны логические поиски и сравнения относительно операций с плавающей запятой? Стоит ли это делать на современных архитектурах?
efficiency
aeismail
источник
источник
Ответы:
Мое эмпирическое правило заключается в том, что если вы можете эффективно вычислить некоторое количество (хорошее использование FPU) менее чем за 50 флопс на значение двойной точности, то лучше пересчитать, чем сохранить. Тенденция, которая была устойчивой в течение десятилетий, заключается в том, что способность с плавающей запятой улучшаться быстрее, чем производительность памяти, и вряд ли ослабнет из-за физических ограничений и энергетических потребностей быстрой памяти. Значение 50 имеет правильное значение для всех популярных вычислительных платформ (Intel / AMD, Blue Gene и GPU).
Приблизительная смета расходов на ядро
[Рекомендации для 2011/2012 машин на базе процессоров Intel и AMD]
MPI_Allreduce
дальнейшее чтение
источник