نمایش نتایج 1 تا 30 از 30

نام تاپیک: برنامه نویسی موازی در vs C++‎ 2010 به وسیله OPENMP

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    Lightbulb برنامه نویسی موازی در vs C++‎‎ 2010 به وسیله OPENMP

    برنامه نویسی موازی با OPENMP
    هنوز ابتدای راهم اما بلاخره بعد از مدت ها تونستم راه اندازی OPENMP رو در ویژوال استودیو 2010 (visual studio 2010) رو پیدا کنم چون هرچه هم کتابخانه omp.h رو include می کردم فایده نداشت.
    این مختصر رو اینجا می نویسم امیدوارم اگر کسی هم مثل من مشکلی براش پیش اومد بتونه از این راهنمایی استفاده کنه.
    برای راه اندازی ابتدا یک پروژه C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎ ایجاد می کنیم البته از نوع win32 consol application توجه داشته باشید از پنجره application setting علامت تیک perecompiled heder رو بردارید (یعنی این گزینه نباید انتخاب شده باشه) بعد ok کنید.
    قسمت اصل کاری:
    در قسمت solution explorer روی پروژه راست کلیک کنید بعد این مسیر رو برید
    peroperties-> configuration peroperties-> c/C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ -> language

    حالا از فریم کناری گزینه openmp support رو yes می کنیم بعدم applay و ok می کنیم.
    حالا دیگه پروژه شما OPENMP رو پشتیبانی می کنه.
    بعد یک فایل .cpp هم برای برنامه نویسی ایجاد می کنیم و داخلش باید برای استفاده از openmp فایل omp.h رو include کنیم.

    نمی دونم چرا این تیکه اصل کاری رو فراموش کرده بودم بنویسم از همه دوستانی که اومدن اینجا و دست خالی برگشتم عذر می خوام
    یه لینک بسیار بدرد بخور هم پیدا کردم که دستورات openmp رو خیلی خوب با مثال توضیح میده. به علت رعایت قانون کپی رایت متن مطلب رو اینجا نمی نویسم اما لینکش رو میگذارم(درست برو بچه های ماهنامه شبکه درد نکنه)

    اینم لینک یه راهنمای خارجی که باز هم دستورات رو خیلی خوب و همراه مثال توضیح داده

    اینم یه نمونه کد کوتاه برای اینکه ببنید برنامه بصورت موازی اجرا می شه یا نه.
    خروجی برنامه باید چاپ اعداد یک تا ده بصورت نامرتب باشه (چون هر عدد توسط یک thread بصورت موازی با threadهای دیگه چاپ میشه و ممکنه threadها پشت سر هم اجرا نشن(این خاصیت برنامه نویسی موازی هست اگر اعداد مرتب چاپ شد به موازی سازی تون شک کنید)
    در این برنامه چون پردازنده من دو هسته ای هست برنامه برام دوتا thread درست می کنه و همه دستورات چاپ رو دوبار برام چاپ می کنه و اعداد داخل حلقه رو هم قاطی دستورات چاپ دیگه چاپ می کنه:) !!!!!!
    باید از دستورات هماهنگ سازی استفاده کرد که من هنوز باهاشون کار نکردم.
    انشاءالله که خدا کمک کنه بیشتر یاد بگیرم اینجا هم بیشتر درباره OPENMP و برنامه نویسی موازی با اون می نویسم.

    اگر دوستان مطلبی بلد هستن به من هم یاد بدن جای دوری نمیره (خدا یک در دنیا صد در آخرت عوض خیر بهتون بده آمییییین)

    اینم اون کد که بهتون گفتم
    #include<omp.h>
    #include<stdio.h>
    #include<conio.h>
    long int i,j,a,k;
    int main(int argc, char* argv[])
    {omp_set_num_threads(4);
    omp_set_dynamic(true);
    omp_set_nested(true);


    #pragma omp parallel shared(i,j,a) num_threads(4)

    {
    k=omp_get_num_procs();
    printf("number of processor= %d \n",k);
    k=omp_in_parallel();
    printf("if program in paralle=1 or serial=0 ?? %d \n",k);
    k=omp_get_max_threads();
    printf("muaximum number of thread= %d \n",k);
    k=omp_get_num_threads();
    printf("number of threads= %d \n",k);
    k=omp_get_thread_num();
    printf("thread number is= %d \n",k);

    #pragma omp for
    for(j=0;j<10;j++)
    printf("%d",j);

    }

    j=0;
    getch();
    return 0;
    }

    خدا خیر بده هرکسی این داکیومنتو درست کرده (از لینک زیر دانلود کیند)

    اگر خدا بخواد تجربیات برنامه نویسی خودم رو هم اینجا میگذارم
    ***************** مطلب جدید *************
    طریقه ایجاد حلقه تو در تو در OpenMP نسخه 2.0 (از نسخه 3.0 به بعد حلقه های تو در تو پشتیبانی می شن.)
    یک راه جالب توی کتاب OpenMP پیدا کردم دوتا حلقه تو در تو رو می شه به یکی از این دو شیوه موازی کرد نمی دونم حلقه سوم رو هم با همین شیوه می شه موازی کرد یا نه اما همینم غنیمته.
    شیوه اول:

    #pragma omp parallel default (shared)
    {
    #pragma omp for
    for(i=0;i<n;i++)
    {
    #pragma omp parallel shared(i,n)
    {
    #pragma omp for
    for(j=0;j<n;j++)
    work(i,j);
    }
    }
    }

    شیوه دوم:

    #pragma omp parallel default (shared)
    {
    #pragma omp for
    for(i=0;i<n;i++)
    work1(i,n);
    }

    void work1(int 1, int n)
    {
    int j;
    #pragma omp for
    for(j=0;j<n;j++)
    work2(i,j);
    }

    ***************************************

    اگر میخواید برنامه نویسی بسیار موازی با cuda رو هم تازه شروع کنید این دو لینک خیلی به دردتون خواهد خورد
    برای نصب و راه اندازی cuda روی ویژوال استودیو C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎ به لینک زیر برید

    و برای آشنایی با نحوه نوشتن یک برنامه موازی کوتاه در cuda به لینک زیر برید

    درپناه حق تعالی باشید

    بقیه آموزش ها رو توی این تاپیک گذاشتم
    https://barnamenevis.org/showthread.p...7-%D8%A7%DB%8C

    --------------------------------
    زکات علم نشر آن است. مولی علی(ع)
    آخرین ویرایش به وسیله sibooy : چهارشنبه 18 تیر 1393 در 18:57 عصر دلیل: قسمت اصلی مطلب جا افتاده بود، اضافه ش کردم

تاپیک های مشابه

  1. برنامه نویسی موازی
    نوشته شده توسط bpzone در بخش C#‎‎
    پاسخ: 9
    آخرین پست: دوشنبه 06 اردیبهشت 1395, 07:40 صبح
  2. مقاله: دانلود کتاب فارسی برنامه نویسی موازی با C#‎ 2010 و NET 4.
    نوشته شده توسط zahmatkesh8519 در بخش C#‎‎
    پاسخ: 0
    آخرین پست: چهارشنبه 28 تیر 1391, 23:25 عصر
  3. برنامه نویسی C در Visual Studio 2010
    نوشته شده توسط Amir.Mansoury در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: شنبه 01 خرداد 1389, 21:06 عصر
  4. برنامه نویسی موبایل با Visual Studio 2010 Proffesional
    نوشته شده توسط mostafarastin239 در بخش WPF
    پاسخ: 2
    آخرین پست: یک شنبه 29 شهریور 1388, 03:50 صبح
  5. کمک : برنامه نویسی موازی
    نوشته شده توسط nima_trade در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 11
    آخرین پست: پنج شنبه 19 آذر 1383, 00:43 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •