"omp_get_num_threads" in "pragma omp parallel for" 给我编译错误
"omp_get_num_threads" in "pragma omp parallel for" is giving me compile error
我得到
error: for statement expected before ‘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;
}
因为我想确定并行区域中的线程数。怎么了?我需要括号吗?
#pragma omp parallel for
语句应该出现在 for
循环之前的行上。
如果您想生成线程而不是立即将它们用于 for
循环,您可以先使用 #pragma omp parallel
生成线程。这会产生线程。然后你可以添加额外的代码行,如printf等。
稍后当您想要将线程用于 for
循环时,在 for
循环之前写入 #pragma omp for
。这样就不会报错了。
例如
#pragma omp parallel
printf("something");
#pragma omp for
for(...){}
我得到
error: for statement expected before ‘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;
}
因为我想确定并行区域中的线程数。怎么了?我需要括号吗?
#pragma omp parallel for
语句应该出现在 for
循环之前的行上。
如果您想生成线程而不是立即将它们用于 for
循环,您可以先使用 #pragma omp parallel
生成线程。这会产生线程。然后你可以添加额外的代码行,如printf等。
稍后当您想要将线程用于 for
循环时,在 for
循环之前写入 #pragma omp for
。这样就不会报错了。
例如
#pragma omp parallel
printf("something");
#pragma omp for
for(...){}