Различная производительность MSVC релиз exe - PullRequest
1 голос
/ 02 апреля 2010

Мне любопытно, что может быть причиной сильно меняющейся производительности одного и того же исполняемого файла. Иногда я запускаю его, и это занимает 20 секунд, а иногда - 110. Исходный код скомпилирован с MSVC в режиме Release со стандартными параметрами.

Код здесь:

vector<double> Un;
vector<double> Ucur;
double *pUn, *pUcur;
...
// time marching
for (old_time=time-logfreq, time+=dt; time <= end_time; time+=dt)
  {
    for (i=1, j=Un.size()-1, pUn=&Un[1], pUcur=&Ucur[1]; i < j; ++i, ++pUn, ++pUcur)
      {
        *pUcur = (*pUn)*(1.0-0.5*alpha*( *(pUn+1) - *(pUn-1) ));
      }
    Ucur[0] = (Un[0])*(1.0-0.5*alpha*( Un[1] - Un[j]   ));
    Ucur[j] = (Un[j])*(1.0-0.5*alpha*( Un[0] - Un[j-1] ));
    Un = Ucur;
  }

EDIT

Извините, не говоря уже о входных данных. Векторы Un и Ucur инициализируются до 2000 элементов со значением 0. Нет данных для чтения / записи. Нет взаимодействия с консолью. Когда я иногда говорю, что я запускаю, это означает, что у меня открыта консоль, другие приложения не запущены, регулирование процессора отключено. Я продолжаю выполнять приложение после его завершения. Я думаю, это связано с кэшированием или чем-то в этом роде, но я не очень хорош в низкоуровневых вещах.

Ответы [ 2 ]

1 голос
/ 02 апреля 2010

Я бы предположил это потому, что вы загружаете большой объем данных с устройства хранения.Если за устройство хранения данных много споров, то все будет работать медленнее, поскольку вашему программному обеспечению нужно дождаться своей очереди, чтобы выполнить некоторую загрузку.

0 голосов
/ 06 апреля 2010

Проблема была решена, когда я переключил аргументы в этой функции с адресов на переменные. Раньше у меня было double &time, double &dt, double &end_time
Сейчас: double time, double dt, double end_time

Кажется, это проблема с памятью ... Надеюсь, это кому-нибудь поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...