Процитировать (спасибо автору за разработку и использование алгоритма!):
https://tavianator.com/fast-branchless-raybounding-box-intersections/
Поскольку современные наборы команд с плавающей запятой могут вычислять min и max без ветвей
Соответствующий код автора - это просто
dmnsn_min(double a, double b)
{
return a < b ? a : b;
}
Я знаю, например, _mm_max_ps
, но это векторная инструкция. Очевидно, что код, очевидно, предназначен для использования в скалярной форме.
Вопрос:
- Что такое скалярная нераспределенная инструкция minmax на x86? Это последовательность инструкций?
- Можно ли предположить, что он будет применяться, или как его назвать?
- Имеет ли смысл беспокоиться о бесветренности min/max? Из того, что я понимаю, для raytracer и/или другого программного обеспечения, с учетом процедуры пересечения лучей, нет надежного шаблона для прогнозирования ветвления, поэтому имеет смысл устранить ветвь. Я прав об этом?
- Самое главное, обсуждаемый алгоритм строится вокруг сравнения с (+/-) INFINITY. Является ли это надежной w.r.t(неизвестной) инструкцией, которую мы обсуждаем, и стандартом с плавающей запятой?
На всякий случай: я знаком с Использование минимальных и максимальных функций в С++, считаю, что это связано, но не совсем с моим вопросом.