openMP文件IO,缺少一些记录

时间:2014-11-13 20:26:29

标签: c++ io parallel-processing openmp file-handling

我在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
    }

0 个答案:

没有答案