PDA

View Full Version : مشکل با حلقه for در openmp



p3m4ni
جمعه 29 شهریور 1392, 21:01 عصر
سلام
این از کد:
#include "stdafx.h"
#include <Windows.h>
#include <omp.h>

char str[20];
INT64 i;
int main()
{
LPCWSTR NAME = LPCWSTR(str);
HANDLE hAppend;
DWORD dwBytesToWrite ,dwPos;
DWORD dwBytesWritten = 0;
hAppend = CreateFile(L"login.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<=MAXINT32;i++)
{
sprintf_s(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
);
}
}
}
و اینم قسمتی از خروجیم:
1ee5 | 60000000
1ee6 | 60000000
1ee7 | 60000000
1ee8 | 60000000
1ee9 | 60000000
1eea | 60000000
0 | | 60000000
0 | 40000000
1eed | 600000001 | 40000000
2 | 40000000
1 | 40000000
1eee | 60000000
1eef | 60000000
1ef0 | 60000000
1ef1 | 60000000
3 | 40000000
1ef 40000000
4 | 40000000
2 | 0
3 | 0
4 | 0

یعنی کلا قاط زده!!!!
جای 4 بایت بالا و پایین رو موقع خوندن باید عوض کرد البته...حالا من با پایپ جداشون کردم .
جای بایتهای پایین تا اینجا درست بوده و لی بالایی ها کلا مشکل دارن.
مشکل کجاست؟

UfnCod3r
جمعه 29 شهریور 1392, 23:41 عصر
اخه عزیز من با OpenMP چنین کاری نمی کنن که . الکی داری همه چی رو صد برابر کندتر می کنی:عصبانی++:
اصلا هدفت ازین که به صورت موازی هی کاراکتر های فایل رو دست کاری کنی چیه
بهتره کل فایل رو یک دفعه بخونی و کاراتو انجام بدی و یک دفعه هم ذخیره کنی . بیچاره هارددیسک:ناراحت:

p3m4ni
شنبه 30 شهریور 1392, 01:39 صبح
بله ظاهرا تو بلاکهای حلقه موازی شده نباید از i/o استفاده کرد هم راندمان و هم یوزیج سی پی یو رو پایین میاره و شتی میشه تو همین مایه ها...جالب اینجاست وقتی یه دستور اینجوری printf("%x"); رو هم بش بدید جای 0 یه سری اعدادو واسه خودش چاپ میکنه.تمام%

p3m4ni
شنبه 30 شهریور 1392, 01:41 صبح
اخه عزیز من با OpenMP چنین کاری نمی کنن که . الکی داری همه چی رو صد برابر کندتر می کنی:عصبانی++:
اصلا هدفت ازین که به صورت موازی هی کاراکتر های فایل رو دست کاری کنی چیه
بهتره کل فایل رو یک دفعه بخونی و کاراتو انجام بدی و یک دفعه هم ذخیره کنی . بیچاره هارددیسک:ناراحت:
حالا شما هم خودتو ناراحت نکن...جوونی و جاهلی...پیش میاد دیگه:اشتباه::چشمک:

UfnCod3r
شنبه 30 شهریور 1392, 09:12 صبح
حالا شما هم خودتو ناراحت نکن...جوونی و جاهلی...پیش میاد دیگه:اشتباه::چشمک:
درست حرف بزن:عصبانی++:
شما اول بر کتاب سی++ برای احمق ها رو بخون بعد بیا این طوری موازی کن :قهقهه: