这是我的代码的一部分。它应该使用openmp来运行此部分,其中包含尽可能多的线程,但它仍然作为一个线程运行。代码的这一部分正在搜索数组并检查该值是否在某个限制范围内。 R和c是表示数组的行和列的整数。 equals方法检查数组中的值是否在限制范围内。如果标记了详细信息,那么数组中的值将被赋予add_list方法,该方法将打印出来。
#pragma omp parallel for private(r,c)
for (r = 0; r < shared_data->sh_rct; r++)
{
for (c = 0; c < shared_data->sh_cct; c++)
{
equals = (approxEqual(sh_rows[r][c], ref, tol) == 1);
if(equals)
{
#pragma omp atomic
sh_count++;
/*if verbose is true add the match to a list that will be printed out*/
if(verbose)
{
print_list = add_list(print_list, r, c, sh_rows[r][c], omp_get_thread_num());
}
}
}
}
答案 0 :(得分:0)
我想这个问题只有两种可能性。
shared_data->sh_rct
== 1.在这种情况下,没有什么可以并行运行。后者可能由以下原因引起:
omp_set_num_threads(1)
OMP_NUM_THREADS
环境变量设置为1 omp_set_dynamic(1)
或OMP_DYNAMIC=TRUE
可能会导致相同的行为。taskset -c1 ./your_app