Проблема понимания пула потоков - PullRequest
1 голос
/ 07 августа 2011

Я пытаюсь выяснить способ выравнивания задач в пуле потоков. У меня есть 4 (параллельных) потока и в начале (каждого шага выполнения потока) 10 задач. Моя первая попытка состояла в том, чтобы измерить время выполнения каждой задачи и на основе этого времени найти наилучшую комбинацию задач в потоках, чтобы получить наилучший возможный результат. Я пытаюсь написать движок параллельной игры на основе этой статьи http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/

Проблема в том, что мое «решение» не работает. Есть ли еще способы выровнять задачи?

(проект на с ++)

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Для выравнивания задач в параллельных потоках используйте семафоры, события, мьютексы.Не измеряйте время, которое занимает задание.Потоки выполняются максимально случайно.Если вы выполняете 4 задачи в параллельных потоках, первые 2 могут завершиться даже раньше, чем начнутся вторые 2.Вот как правильно сделать это

void Thread1()
{
    task1();
    semaphore1.Release()
}

void Thread2()
{
    task2();
    semaphore1.WaitOne();
    task3();
}

таким образом, задача 3 всегда будет выполняться после завершения задачи 1

0 голосов
/ 07 августа 2011

Вы должны проверить как дым (их демонстрационный движок многопоточной технологии), так и nullstien с сайта визуальных вычислений intels, они оба решают задачи пула потоков (у nullstien есть два варианта, планировщик на основе tbb и построенный на заказ)

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