igraph_rng_default()がスレッドセーフな乱数ジェネレータを提供するかどうかを知りたいのですが、その場合はどうすればいいですか?さらに、すべてのスレッドでigraph_sbm_gameを呼び出すと、これらのグラフの生成はスレッドセーフですか?Igraph乱数ジェネレータin c
編集: より明確にするために、これは私が私のプログラムに書いたものです:igraph_sbm_gameが選ばれたRNGに基づいてランダムグラフを生成するので
#define N 2048
#define R 16
#define rngseed 1763984
int main(void)
{
igraph_rng_seed(igraph_rng_default(), rngseed);
#pragma omp parallel shared(some_shared_variables) private(some_private_variables)
{
igraph_matrix_t pref_matrix;
igraph_matrix_init(&pref_matrix, R, R);
igraph_vector_int_t block_sizes;
/*SBM initialization*/
igraph_vector_int_init(&block_sizes, R);
...
...
#pragma omp for ordered schedule(static,1)//ordered schedule(static,1) per risultati in ordine #pragma omp ordered per stampare in ordine
for(q1=0;q1<100;q1++)
{
igraph graph;
igraph_sbm_game(&graph, N, &pref_matrix, &block_sizes, IGRAPH_DIRECTED, IGRAPH_NO_LOOPS);
....
}
}
私の質問は、あり、このランダムですスレッドセーフであることが保証されていますか?つまり、デフォルトのigraph乱数ジェネレータでは、スレッドで安全に乱数を取得できますか?私の疑問は、igraph_sbm_game()関数がシードを必要としないことと、igraphによってどの乱数ジェネレータが使用されているのかを見つけることができないという事実から来ています...
私はあなたが質問を詳しく述べるべきだと思います。スレッドセーフ乱数ジェネレータではどういう意味ですか?あなたはそれを試していくつかの問題を発見しましたか?また[ask]も参照してください。 –
スレッドセーフであっても、スレッドごとに別々のRNGを使用するほうがよいでしょう。これは、デフォルトRNGの競合が発生しないためです。 –
別のスレッドで別々のrngを呼び出すにはどうすればよいですか? –