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

نام تاپیک: انجام یک پردازش با استفاده از هر 2 هسته CPU

  1. #1
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    Tick انجام یک پردازش با استفاده از هر 2 هسته CPU

    با سلام

    برای انجام یک پردازش سنگین نیاز هست از هر 2 هسته CPU استفاده بشه!
    مستنداتش در msdn هست. منتهی نتونستم از اونا استفاده کنم.

    کلا چطور میشه CPU رو مدیریت کرد و چه شرایطی نیاز داره؟


    ممنون

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    ایران - بروجرد
    پست
    723

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    باسلام
    تا اونجایی که من اطلاع دارم CPU های 2 هسته ای بصورت موازی کار میکنند یعنی با هم این نسیت که اگه 2 هسته ای هستش از یکیشون کار بکسید و از اون یکی یه کار دیگه
    اطلاعاتی که من دارم اینه

  3. #3

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    شما فقط کافیه پردازش سنگین رو بین چند Thread تقسیم کنید باقی قضایا اتوماتیک حل میشه، مثالMulti Threading هم تو تالار سی شارپ یا وی بی اگر بگردید پیدا میشه.

  4. #4
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    علی جان فرمایش شما درست ولی شرایط من به صورت زیر هست.

    2 تا CPU هست Xeon هر کدام 2 هسته.
    یک پردازش منسجم هست که داخل یه روتین قرار هست کارش رو انجام بده شما فرض رو مثال زیر بگیر.

    For i = 0 To 9000000000

    Next
    این پروسه در حالت معمولی و بدون Thread و در شرایطی که پروسه CPU من 1% هست با استفاده از یک هسته از 4 هسته موجود داره در عرض حدود 27 ثانیه کارش رو انجام میده حالا من میخوام این پروسه رو روی 2 یا هر 4 هسته پردازش کنم که زمان انجام پردازش کاهش پیدا کنه.

    با اطلاعاتی که من از Thread دارم این کار انجام نشد و اینم در نظر بگیر که این پردازش کاملا به هم پیوسته هست و تفکیک شده جزء یه پردازش خیلی بزرگتره و امکان اینکه از این کوچیک تر بشه وجود نداره که بخوام خود این هم کوچیک تر کنم و بین چند Thread تقسیم کار کنم.

    راه حل تجربی در این خصوص نداری؟!

    موفق باشید

  5. #5

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    والا خیلی بعید میدونم یه کاری رو که نمیشه به کارهای کوچیکتر تقسیم کرد بشه روی چند هسته یا حتی روی چند CPU تقسیم کرد! مگر این که یه فناوری جدیدی اومده باشه ما بیخبریم.

    به هر حال اگر می خواهید از چند پردازنده استفاده کنید باید پروسه رو بشکنید.
    http://www.yoda.arachsys.com/csharp/threads/

    http://www.c-sharpcorner.com/UploadF...d-0b39ad885705

    http://www.visualbuilder.com/csharp/.../pageorder/29/
    با شکستن یک پروسه سنگین به چند پروسه کوچکتر و قرار دادن هر کدام در یک Thread مجزا سیستم عامل به صورت خودکار اونها رو بین هسته ها و CPU ها تقسیم میکنه شما فقط باید شروع و پایانش رو کنترل کنید وبس.

  6. #6

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    خب چرا پروسه رو اينجوری نمیشکنيد ؟
    for(int i=0 ; i<1000000 ; i++)
    {
    dowork();
    }
    for(int i=1000000 ; i<2000000;i++)
    {
    dowork();


    }
    , ....

  7. #7
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    خب چرا پروسه رو اينجوری نمیشکنيد ؟
    ........
    dowork();
    این دستور شما فکر کنم توی Win App سازگار باشه که خودش باعث وقفه میشه که پردازنده به بقیه پیامهای سیستم هم توجه کنه.

    والا خیلی بعید میدونم یه کاری رو که نمیشه به کارهای کوچیکتر تقسیم کرد بشه روی چند هسته یا حتی روی چند CPU تقسیم کرد! مگر این که یه فناوری جدیدی اومده باشه ما بیخبریم.
    علی جان تئوریش رو اینجا مایکروسافت گفته منتهی اطلاعاتم راجع بهش هنوز کامل نیست.

    اینو ببین : من دقیقا پیاده سازیه چنین حالتی رو میخوام.

    http://msdn.microsoft.com/en-us/libr...n.cpumask.aspx

    اطلاعاتی درباره این کلاس داری؟

    موفق باشی

  8. #8

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    با این پیش زمینه ها:

    در این لینکها توضیح کامل در مورد تنظیمات ProcessModel داده:
    ولی با این حال همه اینها فقط شما رو قادر می کنند سرویس دهنده ای داشته باشید که از حداکثر منابع استفاده کند. یعنی اگر چند Thread وجود داشت ASP.NET منابع لازم برای اجرای همزمان اونها رو داشته باشه.

    چه 1 cpu چه 100 تا، حالا اگر تنها یک کار داشته باشیم چطور می خواد این یک کار (غیرقابل خرد شدن) رو با همه cpu ها انجام بده؟
    در مورد کاری که داری انجام میدی یه کم بیشتر توضیح بده.

  9. #9

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    یک پردازش منسجم هست که داخل یه روتین قرار هست کارش رو انجام بده شما فرض رو مثال زیر بگیر.
    کد:
    For i = 0 To 9000000000

    Next
    می تونید از Task Parallel Library که در نسخه 3.5 دات نت معرفی شده، استفاده کنید. علاوه بر چیزی که خواستید، قابلیت های زیادی برای تولید برنامه Multi-threaded بهتون میده. از طرفی بعضی کامپایلرها این امکان را دارند که در صورت امکان، کد را به branchهایی جهت اجرا بر روی چند CPU تبدیل کنند. شاید کامپایلر شما هم سوئیچ هایی برای این منظور داشته باشه. نکته دیگه هم این هست که شاید الگوریتم فعلی شما برای انجام کار مورد نظر، قابلیت شکسته شدن به اجزاء کوچکتر را نداشته باشه، اما ممکنه بتونید از الگوریتم دیگه ایی برای انجام همون کار استفاده کنید که قابل شکسته شدن به اجزاء کوچکتر باشه. به این نکته هم توجه داشته باشیدکه در بدترین حالت اگر پردازش شما فقط روی یک CPU امکان اجرا داشته باشه، باز هم با جدا کردن Thread اجرای آن پردازش از Thread اصلی برنامه، چند درصدی سرعت کار افزایش پیدا خواهد کرد.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  10. #10
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    نکته فوق العاده ای بود ولی ظاهرا این یک کلاس الحاقی هست درست میگم؟!

    http://www.microsoft.com/downloads/d...displaylang=en

    یا من با چیزه دیگه اشتباه گرفتمش؟

    -------------------------------------
    نوع کار اینه که:
    چند تا وب سرور یه سری در خواستها رو پروسس و ذخیره میکنن حالا یه سرور اصلی در نظر گرفته شده که اطلاعات ذخیره شده توسط وب سرور ها رو بر اساس یه الگوریتم خاص مجداد پردازش میکنه و در اصل اطلاعاتی که از وب سرور ها گرفته شده را نوع خاصی فیلتر روشون اعمال میکنه.
    حالا این وسط زمان پردازش اهمیت داره ، چون مثلا اگر یکی از رکورد ها تا 30 ثانیه آینده پردازش اصلی روش انجام نشه کل پروسس بیهوده بوده و همینوطر پردازش تمام رکورد ها وابسته به پردازش رکورد قبلی و یه سری دیگه اطلاعات هست برای همین محدودیت دارم برای استفاده بیشتر از Thread برای همین من پردازش رو میخوام به دو دسته تقسیم کنم و هر CPU من یک گروه کاری رو به عهده بگیره منتها میخوام از هر 2 هسته Cpu استفاده بشه که زمان رو نصف کنم.

    ممنون از لطفت

  11. #11

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU

    ظاهرا این یک کلاس الحاقی هست درست میگم؟!

    http://www.microsoft.com/downloads/d...displaylang=en

    یا من با چیزه دیگه اشتباه گرفتمش؟
    همینی هست که گرفتید.

    اگر یکی از رکورد ها تا 30 ثانیه آینده پردازش اصلی روش انجام نشه کل پروسس بیهوده بوده
    اینجور محدودیت های زمانی، یعنی به نوعی سیستم شما یک سیستم Real-time هست. می تونید در زمینه سیستم های Real-time تحقیق کنید. بطور کلی، سیستم Real-time سیستمی هست که تضمین میکنه عمل خاصی را در محدوده یک بازه زمانه مشخص انجام بده.

    همینوطر پردازش تمام رکورد ها وابسته به پردازش رکورد قبلی و یه سری دیگه اطلاعات هست
    اگر پردازش ها به همدیگر مربوط هستند و حتما باید پشت سر هم انجام شوند، ممکن هست که بتوانید هر پردازش را به اجزاء کوچکتری تقسیم کنید، یعنی بجای آنکه هر هسته CPU با یک پردازش کار کند، می توانید هر پردازش را به اجزاء کوچکتری تقسیم کنید که هر یک بر روی یک CPU اجرا شوند. این کار باعث افزایش سرعت هر پردازش و در نتیجه افزایش سرعت انجام کل پردازش ها می شود.

    برای همین من پردازش رو میخوام به دو دسته تقسیم کنم و هر CPU من یک گروه کاری رو به عهده بگیره منتها میخوام از هر 2 هسته Cpu استفاده بشه که زمان رو نصف کنم.
    اگر بخواید از TPL استفاده کنید، می تونید یک Task Manager داشته باشید که وظیفه اش مدیریت انجام پردازش شما ست. حالا می تونید این پردازش کلی را به چند Task کوچکتر تقسیم کنید (مثلا به قول شما کار را به دو دسته یا بیشتر تقسیم کنید). خوبی کار با TPL این هست که شما فقط به کار نوشتن Taskها و تقسیم کار کلی بین آنها مشغول میشید. TPL خودش بر اساس فاکتورهای مختلف - مثل تعداد هسته های CPU موجود- تعداد Thread ها و نحوه اجرای آنها را کنترل می کند. از طرفی سعی می کند بار حاصل از انجام پردازش را روی تمامی هسته ها تقسیم کند، یعنی اگر هسته ایی پردازش مربوط به خود را انجام داد و آزاد شد، ولی سایر هسته ها هنوز مشغول هستند، TPL بطور خودکار بخشی از کار مربوط به سایر هسته ها را به هسته آزاد واگزار می کند تا توازن بار پردازشی حفظ شود. یکی از مزیت های TPL این هست که برنامه نویس را از درگیر شدن در جزئیات ساخت Thread-pool، ساخت و آزاد کردن Worker Thread ها، مدیریت اجرای آنها، و حفظ توازن بار پردازشی بی نیاز میکنه؛ برنامه نویس فقط روی تقسیم مسئله به چند Task و چگونگی انجام هر Task تمرکز میکنه.

    در هر حال، ممکن هست که دوستان دیگه بتوانند راهنمایی های عملی بهتری بکنند، چون من اصلا دات نت کار نمی کنم.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  12. #12

    نقل قول: انجام یک پردازش با استفاده از هر 2 هسته CPU


  13. #13

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

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