Как сделать расписание openmp более упорядоченным для контрольных точекC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать расписание openmp более упорядоченным для контрольных точек

Сообщение Anonymous »

Я пытаюсь выполнить большой цикл в C++ с помощью #pragma omp параллельно.
Мне нужно отслеживать значения индекса диапазона i, которые уже были протестированы (контрольные точки), поскольку задание необходимо будет возобновить, если он прерывается (убивается). (Переделать часть работы можно.) Этот код хорошо работает на моем компьютере с Linux на базе Intel, но на Apple Silicone OpenMP расписание повсюду. См. ниже. Как это можно исправить? Или, может быть, в этом контексте есть более продвинутый метод проверки точек?

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int main() {
omp_set_num_threads(3);
#pragma omp parallel for schedule(dynamic, 100)
for (int i = 0; i < 20000; ++i){
int id=omp_get_thread_num();
//using puts since it is thread safe
if(!(i % 100)) puts((to_string(i)+": id:"+to_string(id)).c_str());
//here instead of actual job, I am creating a tiny random delay
mt19937_64 eng{random_device{}()};  //seed
uniform_int_distribution dist{10, 100};
this_thread::sleep_for(std::chrono::milliseconds{dist(eng)});
}
return 0;
}
Linux с Intel:

Код: Выделить всё

0: id:2
100: id:1
200: id:0
300: id:1
400: id:0
500: id:2
....
Процессор Mac + M3 (с библиотекой Mac openmp и компилятором clang):

Код: Выделить всё

0: id:0
6700: id:1
13400: id:2
100: id:0
6800: id:1
13500: id:2
200: id:0
6900: id:1
Этот график бесполезен для контрольных точек. Я стараюсь избегать статического расписания, поскольку оно неэффективно.

Подробнее здесь: https://stackoverflow.com/questions/789 ... ckpointing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»