gpt4 book ai didi

c - 我的 c 程序应该使用 openmp 在多个线程中运行,但事实并非如此

转载 作者:行者123 更新时间:2023-11-30 17:25:37 24 4
gpt4 key购买 nike

这是我的代码的一部分。它应该使用 openmp 来运行该部分,并使用与内核一样多的线程,但它仍然作为一个线程运行。这部分代码正在搜索数组并检查该值是否在特定限制内。 R 和 c 是表示数组的行和列的整数。 equals 方法检查数组中的值是否在限制范围内。如果标记了 verbose,则数组中的值将被赋予将其打印出来的 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());
}
}
}
}

最佳答案

我猜这个问题只有两种可能。

  1. shared_data->sh_rct == 1. 在这种情况下,没有任何东西可以并行运行。
  2. OpenMP 运行时被告知将线程数量限制为一个。

后者可能由以下原因引起:

  • 之前调用 omp_set_num_threads(1)
  • OMP_NUM_THREADS 环境变量设置为 1
  • 在某些情况下,之前调用 omp_set_dynamic(1)OMP_DYNAMIC=TRUE 可能会导致相同的行为。
  • 该进程只允许在一个核心上运行。例如。 taskset -c1 ./your_app

关于c - 我的 c 程序应该使用 openmp 在多个线程中运行,但事实并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com