【问题标题】:"omp_get_num_threads" in "pragma omp parallel for" is giving me compile error“pragma omp parallel for”中的“omp_get_num_threads”给了我编译错误
【发布时间】:2022-01-15 20:42:33
【问题描述】:

我得到了

错误:在'printf'之前预期的语句

在我的代码中:

float *vector_matrix_product(float *A, int m, int n, float *x)
{
    float *b = (float*) calloc(m, sizeof(float));

    #pragma omp parallel for default(none) shared(A,m,n,x,b), private(i,j)
            printf("Threads: %d\n", omp_get_num_threads()); // << here
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    b[i] += A[i * n + j] * x[j];
                }
            }

    return b;
}

因为我希望确定我的并行区域中的线程数。有什么错误?我需要括号吗?

【问题讨论】:

    标签: c openmp


    【解决方案1】:

    #pragma omp parallel for 语句应该出现在 for 循环之前的那一行。

    如果您想生成线程而不是立即将它们用于for 循环,您可以首先使用#pragma omp parallel 生成线程。这会产生线程。然后你可以添加额外的代码行,如 printf 等。

    稍后当您想将线程用于for 循环时,请在for 循环之前写入#pragma omp for。这样就不会报错了。

    例如

    #pragma omp parallel
        printf("something");
        #pragma omp for
          for(...){}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2021-11-23
      • 2021-08-20
      相关资源
      最近更新 更多