我发现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/