For loop OPENMP中for循环的输出错误
你好,我是OpenMp中的新手,对简单for循环有问题。这是我的代码:For loop OPENMP中for循环的输出错误,for-loop,openmp,For Loop,Openmp,你好,我是OpenMp中的新手,对简单for循环有问题。这是我的代码: #include "stdafx.h" #include <Windows.h> #include <omp.h> char str[20]; INT64 i; int main() { HANDLE hAppend; DWORD dwBytesToWrite ,dwPos; DWORD dwBytesWritten = 0; hA
#include "stdafx.h"
#include <Windows.h>
#include <omp.h>
char str[20];
INT64 i;
int main()
{
HANDLE hAppend;
DWORD dwBytesToWrite ,dwPos;
DWORD dwBytesWritten = 0;
hAppend = CreateFile(L"log.txt" ,
GENERIC_WRITE,
0, // do not share
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
#pragma omp parallel num_threads(4) private(i)
{
#pragma omp for ordered
for( i=0; i<=MAXINT64;i++)
{
sprintf(str,"%x | %x \r\n",i);
dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);
LockFile(hAppend, dwPos, 0, strlen(str), 0);
WriteFile(
hAppend,
str,
strlen(str),
&dwBytesWritten,
NULL
);
}
}
}
没有打开的mp,一切都正常,但有并行性吗
输出出错。OpenMp?或我的代码有什么问题?既然您在for构造中使用了“ordered”子句,您是否尝试以有序方式运行部分并行“for”循环
如果在“for”构造上使用“ordered”来序列化循环的各个部分(对文件的访问?),那么还需要在循环体中使用“ordered”构造来告诉编译器必须按顺序执行并行循环的哪个部分:
#pragma omp parallel for ordered
for(...) {
// something that runs parallel
do_parallel();
// serialize
#pragma omp ordered
{
do_ordered();
}
}
使用openmp和锁定/写入文件以及未在for循环中声明str private可能会出现问题
#pragma omp parallel for ordered
for(...) {
// something that runs parallel
do_parallel();
// serialize
#pragma omp ordered
{
do_ordered();
}
}