OpenMP и файловый ввод / вывод - PullRequest
2 голосов
/ 26 августа 2010

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

for(int size = 30; size < 50; ++size) {
    #pragma omp parallel for
    for(int trial = 0; trial < 8; ++trial) {
        time_t start, end;
        //initializations
        time(&start);

        //perform computation

        time(&end);

        output << size << "\t" << difftime(end,start) << endl;
    }
    output << endl;
}

У меня есть подлое подозрение, что это своего рода ошибка, однако, поскольку два потока могут одновременно записывать значения в вывод, что приводит к неправильному форматированию. Является ли это проблемой, и если да, то исправит ли код output << size << ... оператором #pragma omp critical это

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Не берите в голову, будет ли Ваш выход испорчен (это вероятно будет). Если вы не очень осторожны в назначении потоков OpenMP различным процессорам, которые не разделяют ресурсы, такие как пропускная способность памяти, ваши временные испытания также не очень значимы. Различные трассы будут мешать друг другу.

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

0 голосов
/ 26 августа 2010

Пока вы не возражаете против того, что отдельные строки вышли из строя, все будет в порядке.OpenMP должен убедиться, что вся строка печатается за раз.

Однако вам нужно будет объявить начало и конец как приватные в прагме, иначе потоки будут перезаписывать их и портить время.

...