作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码的一部分。它应该使用 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());
}
}
}
}
最佳答案
我猜这个问题只有两种可能。
shared_data->sh_rct
== 1. 在这种情况下,没有任何东西可以并行运行。后者可能由以下原因引起:
omp_set_num_threads(1)
OMP_NUM_THREADS
环境变量设置为 1omp_set_dynamic(1)
或 OMP_DYNAMIC=TRUE
可能会导致相同的行为。taskset -c1 ./your_app
关于c - 我的 c 程序应该使用 openmp 在多个线程中运行,但事实并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021794/
我是一名优秀的程序员,十分优秀!