[как правильно] Алгоритм
Делать либо как ты сказал, либо делать вложенный цикл, количество инструкций на итерацию очевидно будет меньше во втором случае.
какова альтернатива, если это плоходелать вывод другим тредом без синхронизации. При этом продумать как именно будут проявляться побочные эффекты от отсутствия синхронизации и их минимизировать.
В качестве альтернативы додумался до вложенного цикла, каждый вложеный зависит только от результатов предыдущего. Вопрос теперь сокращается до первой части начального. Насколько плохо иметь в большом цикле проверку условия?
Насколько плохо делать внутри этого цикла проверку условия 'if'-ом и какова альтернатива, если это плохо?только ты можешь понять плохо это или нормально
выведи да посмотри, как это повлияет на работу
если сбор\вывод статистики у тебя является быстрой операцией (особенно по сравнению со всей симуляцией то смело выводи
если это долгая операция, то имеет смысл уже ускорять приложение (выводить процедуру в другой поток, делать не на каждые 1e4, а на каждые 1e5 и тд)
если вопрос не о скорости, а о дизайне приложения, то никаких противопоказаний нет (во всяком случае данных очень мало)
Величина плохости обратно пропорциональна величине необходимости.
Насколько плохо иметь в большом цикле проверку условия?хуже, чем если бы этой проверки не было.
а конкретный ответ станет ли хуже существенно или будет вообще незаметно может дать только замер производительности: до вставки и после.
Как я понимаю вложеные циклы выгоднее, поскольку в противном случае на каждой иттерации будет делаться проверка, разве нет?
Как я понимаю вложеные циклы выгоднее, поскольку в противном случае на каждой иттерации будет делаться проверка, разве нет?Она, правда, на пару-тройку порядков меньше времени занимает, чем одна итерация Monte-Carlo simulation, мне кажется.
хуже, чем если бы этой проверки не былода скорее всего неважно есть там эта проверка или нету
надо профилировать
Как я понимаю вложеные циклы выгоднее, поскольку в противном случае на каждой иттерации будет делаться проверка, разве нет?Да, верно.
да скорее всего неважно есть там эта проверка или нетуесли тело цикла маленькое и компилятор умеет его разворачивать, то if будет ухудшать такой разворот. И тогда лучше, конечно, делать через вложенный цикл без if-а.
Вроде branch prediction должен все разрулить?
Вроде branch prediction должен все разрулить?branch predction только избавит от потерь на выгрузку/загрузку команд в процессор, но полутакты выполнения if-а все равно никуда не денутся.
Пиши сначала с if. Оптимизацией потом займёшься, с профайлером в руках.
Оставить комментарий
darin06
Привет всем! Вопрос следующий:Есть большой-большой цикл ('for' loop, >1e9 iterations, Monte-Carlo simulations на каждой итерации делается нечто, и хочется, скажем раз в 1e4 иттераций, делать вывод промежуточных результатов (их немного и я могу выкидывать в буффер). Насколько плохо делать внутри этого цикла проверку условия 'if'-ом и какова альтернатива, если это плохо?