【发布时间】:2015-08-25 22:34:56
【问题描述】:
我是新来的,这是我在这个网站上的第一个问题;
我正在做一个简单的程序来找到向量 c 的最大值,它是另外两个向量 a 和 b 的函数。我在 Microsoft Visual Studio 2013 上执行此操作,问题是它仅支持 OpenMP 2.0,我无法执行归约操作来直接找到向量的最大值或最小值,因为 OpenMP 2.0 不支持此操作。 我正在尝试使用以下代码在不减少构造函数的情况下进行:
for (i = 0; i < NUM_THREADS; i++){
cMaxParcial[i] = - FLT_MAX;
}
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for private (i,j,indice)
for (i = 0; i < N; i++){
for (j = 0; j < N; j++){
indice = omp_get_thread_num();
if (c[i*N + j] > cMaxParcial[indice]){
cMaxParcial[indice] = c[i*N + j];
bMaxParcial[indice] = b[j];
aMaxParcial[indice] = a[i];
}
}
}
cMax = -FLT_MAX;
for (i = 0; i < NUM_THREADS; i++){
if (cMaxParcial[i]>cMax){
cMax = cMaxParcial[i];
bMax = bMaxParcial[i];
aMax = aMaxParcial[i];
}
}
我收到错误消息:“表达式必须具有整数或无范围枚举类型”
在命令cMaxParcial[indice] = c[i*N + j];
谁能帮我解决这个错误?
【问题讨论】:
-
你能发一个完整的minimal reproducible example吗?
-
嗨,我犯了一个错误:我将 'indice' 声明为 float 而不是 int,现在我更正它并运行代码。但是我使用静态向量造成了错误共享,我们的同事帮助我发送了您的代码,例如示例。感谢您的评论
标签: c++ visual-studio visual-studio-2012 openmp