1
Ниже минимальный пример иллюстрирует поведение stxxl при инициализации контейнеров параллельно (с использованием OpenMP):Параллельный STXXL вектор инициализации
#include <omp.h>
#include <stdio.h>
#include <stxxl.h>
typedef stxxl::VECTOR_GENERATOR<float>::result VEC_T;
int main(int argc, char* argv[]) {
const unsigned long NUM = 8;
#pragma omp parallel num_threads(NUM)
{
VEC_T v;
printf("%d\t%p\n", omp_get_thread_num(), &v);
}
return EXIT_SUCCESS;
}
, работающие в любой
[STXXL-ERROR] File too large
или
[SYSTEM-ERROR]Segmentation fault
Как я могу выделить stxxl-контейнеры в нескольких потоках?
И, конечно же, если вся цель вашего цикла, чтобы построить эти емкости, вы не будете видеть в основном никакой выгоды для запуска этого в OpenMP против последовательно из соотношения от серийной до параллельной работы. – NoseKnowsAll
Просто минимальный пример концепции параллельной инициализации –
Вы уверены, что инициализация векторов действительно не является потокобезопасной? http://stxxl.sourceforge.net/tags/master/faq.html#faq_threadsafe утверждает, что доступ к различным структурам данных из параллельных потоков в порядке. Я предполагаю, что только первая инициализация STXXL не является потокобезопасной. Когда я добавляю 'VEC_T u;' перед параллельным разделом, я больше не получаю никаких ошибок. – michitux