Как мне явно выполнять задачи?

0

Предположим, что у меня есть две функции:

Fun1();
Fun2();

Эти функции независимы, и задача будет улучшена, если я смогу запустить их параллельно (то есть запустить Fun1 в одном потоке и Fun2 на другом. Я использую Visual Studio 2012 - так что Open MP 2.0.

Есть ли прямой способ (без какого-либо тестирования числа нитей параллельной области или для уклонения циклы) для достижения этого? Обеспечивает ли OpenMP такую функциональность?

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

Теги:
multithreading
openmp

3 ответа

4
Лучший ответ

Вы можете использовать конструкцию совместного использования sections:

#pragma omp parallel sections
{
#pragma omp section
  Fun1();
#pragma omp section
  Fun2();
}

Цитирование из спецификаций OpenMP 2.0 (раздел 2.4.2):

Директива разделов определяет нетеративную конструкцию совместного использования, которая задает набор конструкций, которые должны быть разделены между потоками в команде. Каждый раздел выполняется один раз по потоку в команде.

5

С++ 11:

std::thread thread1(Fun1);
Fun2(); // runs on main thread
thread1.join(); // wait for completion

Если у вас нет С++ 11, вы можете заменить std::thread на boost::thread и сделать то же самое.

0

Да, почему бы не использовать собственные потоки или некоторые обертки вокруг них? Open MP, насколько я знаю, намного эффективнее, чем простой инструмент для запуска нитей. Конечно, вы можете пометить некоторую переменную флага как shared или private и проверить ее внутри parallelling pragma или, возможно, получить соответствующие результаты с помощью директивы расписания (не помните точно все функции OMP), но...

  • У вас есть только несколько задач
  • На самом деле это не параллельные вычисления, это не eveb какой-то примитивный пул потоков, та же проблема, что и получение GUI и вычислений в двух отдельных потоках
  • Вы ничего не сказали о синхронизации или сложном поточном сотрудничестве

Похоже, вам не нужен Open MP.

  • 1
    Интересно , что или кого вы нацелены ваши Yeah на? Это несколько смущает меня: S
  • 0
    Извините, возможно, я не очень хорошо говорю по-английски, но я определенно согласен с простым, но лучшим решением, предложенным Джоном Цвинком. Автор спрашивал об Open MP, кажется, он настаивал на этом, но без веской причины. UPD: ops, там есть другой ответ. Страница не обновлялась вовремя.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню