1

次の最小限の例は、(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 コンテナーを割り当てるにはどうすればよいですか?

4

1 に答える 1

1

stxxl コンテナーの初期化はスレッドセーフではないため、コンテナーを初期化するスレッドの相互排除が必要です。openMP を使用すると、次のようになります。

#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;
            #pragma omp critical
            {
                    v = new VEC_T();
            }
            printf("%d\t%p\n", omp_get_thread_num(), &v);
            delete v;
    }
    return EXIT_SUCCESS;
}
于 2015-10-22T15:55:22.170 に答える