تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: C# استفاده از چند هسته سی پی یو

  1. #1
    پروفشنال saurron's Avatar
    تاريخ عضويت
    Aug 2010
    محل سكونت
    IN MY CURSED DREAM
    پست ها
    715

    پيش فرض C# استفاده از چند هسته سی پی یو

    سلام من یه برنامه دارم که توی این برنامه یه حلقه هست که معمولا زمان زیادی رو برای تکمیل میگیره
    از اون طرف برنامه فقط از یکی از هسته های سی پی یو استفاده میکنه
    میشه منو راهنمایی کنید که کاری کنم برنامه از تمام قدرت سی پی یو استفاده کنه؟
    ممنون

  2. #2
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    1- می توانید از کلاس های Parallel استفاده کنید. در قبل برای حلقه در [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] مثال زده ام.
    2-می توانید از اجرای کدها به روش Multi Taskاستفاده کنید.
    3- می توانید از اجرای کدها به روش Multi Thread استفاده کنید.
    در هر صورت یک قطعه کد به صورت ساده CPU های نسل فعلی را مشغول نمی گرداند.

    موفق باشید.
    Last edited by Msba; 24-04-2013 at 21:35. دليل: اصلاح لینک

  3. 4 کاربر از Msba بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    پروفشنال saurron's Avatar
    تاريخ عضويت
    Aug 2010
    محل سكونت
    IN MY CURSED DREAM
    پست ها
    715

    پيش فرض

    1- می توانید از کلاس های Parallel استفاده کنید. در قبل برای حلقه در [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] مثال زده ام.
    2-می توانید از اجرای کدها به روش Multi Taskاستفاده کنید.
    3- می توانید از اجرای کدها به روش Multi Thread استفاده کنید.
    در هر صورت یک قطعه کد به صورت ساده CPU های نسل فعلی را مشغول نمی گرداند.

    موفق باشید.
    مشکلات (سوالات) در مورد Parallel
    1) متاسفانه حلقه ی for که توی برنامه هست از double استفاده میکنه و تبدیل اون به long باعث کاهش دقت میشه، و Parallel از double پشتیبانی نمیکنه
    2) من یک حلقه ساده ایجاد میکنم به این صورت:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اما جواب بجای 100000 یک عدد دیگه در حدود 50000 هست، انگار با اینکه ظاهرا تمام هسته ها درگیر هستند ولی فقط تغییراتی که توسط یک هسته ایجاد میشه در نظر گرفته میشه، یا...
    ببخشید من کمتر از 2 ساعت هست با Parallel آشنا شدم و اشتباهات زیادی دارم.

    در مورد دو مورد بعد فکر میکنم باید حلقم رو به چند بخش تقسیم کنم و هر بخش رو به یک Thread بدم برای اجرا(کار سختیه)، درسته؟
    ممنون از پاسخ سریع

  5. #4
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    حدس بزنید چرا به جای 100000 شما یک عدد دیگر می گیرید؟؟؟؟
    فرض: یکی از هسته ها می خواهد ثبت کنه اون یکی داره می خونه و اون یکی هم داره حاصل جمع رو میریزه! اوه اوه چه شیر تو شیریه!
    برای همین برخی حاصل جمع های شما از بین میره.برای این که عمل درست شود اینگونه باید بنویسید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب این کد یک مشکل اجرایی اساسی دارد. اول امتحان کنید بعد خط های بعدی را بخوانید.
    --------------------------------------------------------------------
    --------------------------------------------------------------------
    --------------------------------------------------------------------
    --------------------------------------------------------------------
    --------------------------------------------------------------------
    مشکل چیست؟ مشکل در سرعت اجراست. اگر قرار باشد چند هسته بیشتر از یک هسته طول بکشد که ..............
    چرا طول می کشد؟ Lock یک عبارت کند است و به شدت کاهش سرعت ایجاد می کند.
    پس باید الگوریتم را کمی تغییر دهیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    الان پس از هر محاسبه مقدار جایگزین می شود و این کار تنها lock را در پایان هر Thread از پارالل اجرا می کند نه هر دفعه.
    برای کنترل بیشتر در این ساختار نیز:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در حالت عادی مثل بالا این overload فقط int را به عنوان آرگومان پاس و پس می گیرد. برای رفع محدودیت از نوع ارسال آرگومان و بازگشتی می توان توع آرگومان را اینگونه تغییر داد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    پس متدهایمان نیز اینگونه می شوند:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشید.

  6. 3 کاربر از Msba بخاطر این مطلب مفید تشکر کرده اند


  7. #5
    پروفشنال saurron's Avatar
    تاريخ عضويت
    Aug 2010
    محل سكونت
    IN MY CURSED DREAM
    پست ها
    715

    پيش فرض

    بیست و محشر!!!
    بسیار ممنون، سعی میکنم تا عصر کد هام رو به این صورت تغییر بدم تا ببینم چی میشه.

    ------------------------------------------------
    نه به یک مشکلی برخوردم، من شمارنده هام double هاست نه تابع
    مثلا:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سعی میکنم تعداد حلقه رو مشخص کنم و از long استفاده کنم
    Last edited by saurron; 25-04-2013 at 11:23.

  8. #6
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    بیست و محشر!!!
    بسیار ممنون، سعی میکنم تا عصر کد هام رو به این صورت تغییر بدم تا ببینم چی میشه.

    ------------------------------------------------
    نه به یک مشکلی برخوردم، من شمارنده هام double هاست نه تابع
    مثلا:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سعی میکنم تعداد حلقه رو مشخص کنم و از long استفاده کنم
    ؟
    ما هم شمارنده داشتیم. نه تابع!
    اون متدها وظیفه شمارش را داشتند. نه اینکه خودشون شمارش بشن.
    من مثال double برای Parallel را هم قرار داده ام. آخرین قسمت پست قبل.

    موفق باشید.

  9. این کاربر از Msba بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •