C / C ++ - имитация длительной работы - PullRequest
2 голосов
/ 06 февраля 2012

Я анализирую параллельный алгоритм, работающий на нескольких процессорах.

Но это просто, поэтому мне нужно смоделировать длительную операцию для анализа эффективного ускорения.

  1. sleep () / usleep () не вариант. Мне нужно, чтобы процессор был занят, чтобы подчиненная программа не могла работать во время сна других ведомых. Здесь ускорение неверно.

  2. Длинный пустой цикл for является опцией. Но я также хочу установить время операции явно.

Есть ли способ объединить эти два или использовать что-то еще, чтобы получить длительную операцию с фиксированным временем?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Позвоните gettimeofday перед входом в цикл и запомните время Внутри цикла постоянно вызывайте gettimeofday и вычисляйте разницу между текущим временем и началом Когда разница будет достаточно большой, вырвитесь из цикла.

По сути, что-то вроде этого:

struct timeval tv_begin, tv_current;
gettimeofday(&tv_begin, NULL);

for (;;) {
    gettimeofday(&tv_current, NULL);
    unsigned long long diff = 
        (tv_current.tv_sec * 1000000 + tv_current.tv_usec) -
        (tv_begin.tv_sec * 1000000 + tv_begin.tv_usec);

    if (diff > TIMEOUT)
        break;
}
2 голосов
/ 06 февраля 2012

getitimer () / setitimer () . Установите таймер, попросите обработчик сигнала для SIGALRM установить переключатель, который вырвет вас из цикла. Цикл делает то, что он делает - или, может быть, ничего - пока не сработает таймер.

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