我发现openmp不支持while循环(或者至少不太喜欢它们)。
也不喜欢'!='操作员。
我有这个密码。

int count = 1;
#pragma omp parallel for
    while ( fgets(buff, BUFF_SIZE, f) != NULL )
    {
        len = strlen(buff);
        int sequence_counter = segment_read(buff,len,count);
        if (sequence_counter == 1)
        {
            count_of_reads++;
            printf("\n Total No. of reads: %d \n",count_of_reads);
        }
    count++;
    }

关于如何处理这个问题有什么线索吗?我在某个地方读到(另一篇关于stackoverflow的文章)我可以使用管道。那是什么?如何实施?

最佳答案

在OpenMP中实现“parallel while”的一种方法是使用while循环来创建任务。下面是一个概要:

void foo() {
    while( Foo* f = get_next_thing() ) {
#pragma omp task firstprivate(f)
        bar(f);
    }
#pragma omp taskwait
}

对于在fgets上循环的特定情况,请注意fgets具有固有的顺序语义(它得到“下一行”),因此在启动任务之前需要调用它。对每个任务来说,对fgets返回的数据的自己的副本进行操作也很重要,这样对fgets的调用不会覆盖前一个任务正在操作的缓冲区。

关于c - openmp-文本文件读取和使用管道的while循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16812302/

10-09 00:49
查看更多