我在c ++中有以下openMP代码,基本上它为每个用户创建一个字符串并将其写入文件(我不关心顺序)。会发生什么事情,我错过了一些记录(2M中的3K)。有谁知道可能是什么原因以及如何解决它? (我的怀疑是一个线程先终止并关闭文件?)谢谢!!
#pragma omp parallel for
for(int m = 1; m <= uid[0]; m++){
double val[ARRAY_SIZE]={0.};
int top[ARRAY_SIZE]={0};
for(int i = 1; i <= n; i++){
double pred_v = 0;
for(int t = 0; t < rank; t++){
pred_v += W[uid[m]-1][t] * H[i-1][t];
}
double min = val[0];
int min_idx = 0;
for(int j = 1; j < k; j++){
if(val[j] < min){
min = val[j];
min_idx = j;
}
}
if(min<pred_v){
val[min_idx] = pred_v;
top[min_idx] = i;
}
}
stringstream buf;
buf << uid[m];
for(int j = 0; j < k; j++)
buf << "\t" << top[j] << ":" << val[j];
buf << "\n";
#pragma omp critical
fprintf(output_fp, buf.str().c_str()); //I think there is some problem here
}