Показать сообщение отдельно
  #1  
Старый 22.03.2012, 10:18
Dogmat-iGwt Dogmat-iGwt вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 7
Репутация: 10
По умолчанию Снижение загрузки ЦП или увеличение скорости программы

Подскажите пожалуйста, я делаю программу, которая рассчитывает все возможные исходы одного процесса.

Процесс зависит от 20-ти переменных, диапазоны значений которых либо известны изначально, либо зависят друг от друга. Таким образом получается 20 вложенных циклов for.

Расчет происходит в 4 этапа (6-6-6-2 цикла), после каждого происходит обращение к подпрограмме, в которой только блок условий if-then-else,считающий переменные для следующего этапа.

При стандартном наборе переменных программа вычисляет больше миллиарда вариаций, что занимает у нее больше 12 минут. Процесс идет в 2 потока и грузит 33% ЦП, при этом программа виснет и не отвечает в диспетчере задач.

Я попытался снизить количество вычислений следующим образом: вычленил некоторые закономерности процесса и, в случае наступления такой закономерности, пропускал последнее обращение к подпрограмме переходя к следующему значению по циклу. Однако время расчета не снизилось даже на секунду, то есть, как я понял, блок, содержащий только условия, ЦП практически не грузит. Есть ли способ как-то еще снять нагрузку, чтобы снизить время хотя бы до 3,5 минут? Некоторые циклы при определенных условиях содержат всего одно значение, если от них как-нибудь избавиться, то это снизит нагрузку?
Ответить с цитированием