Я постараюсь как можно яснее с моим вопросом (не просто ... для меня это не совсем понятно). Предположим, у вас есть набор IF ... THEN инструкции с несколькими операндами, напримерСкорость выполнения условных инструкций по сравнению с математическими функциями
IF ((a==0) && (b==1) && (c==1)) THEN x=1
ELSE IF ((a==0) && (b==0) && (c==1)) THEN x=2-
и так далее
Предположим, что я мог бы заменить все эти IFs с одной математической функции, как x = a * n1 + b * n2 + c * n3
(этот просто для того, чтобы дать вам представление, в реальности это сложнее, но также IF и операнды гораздо больше)
Функция исходит из ранее обученной искусственной нейронной сети.
Чувство моего чувства заключается в том, что когда дело доходит до исполнения, функция должна занимать намного меньше времени, чем IF, но это всего лишь ощущение кишки, которое исходит из моего старого фона в сборке, где они учили нас тому, что условная инструкция проходит больше времени, чем арифметическое.
Можете ли вы это подтвердить? может быть, даже предоставить мне ссылку, где я могу найти объяснение?
Спасибо заранее, ребята!
Я думаю, ваша интуиция является правильным. Я позаботился о нескольких вопросах оптимизации здесь, в том числе о неожиданных результатах устранения ветвей. –
https://en.wikipedia.org/wiki/Branch_predictor и статьи, на которые он ссылается, дадут начало. Относительная прибыль зависит от сложности функции и от возможных ветвей, но, с современными процессорами, часто бывает актуальной конвейерная обработка и отраслевые предсказатели. – Peter
Возможно, вам стоит сначала проверить, что ваш компилятор [уже не может этого сделать] (http://stackoverflow.com/questions/26124620/why-does-msvc-emit-a-useless-movsx-before-performing-this-bit -test), прежде чем запускать свою программу. И, конечно, * всегда * сначала проверяйте, что это действительно * может * изменить ситуацию, используйте профилировщик. Задание программиста состоит в том, чтобы измерять три раза, разрезать один раз. –