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

نام تاپیک: سوال درباره ی اجرای چند نخی و استفاده از چند هسته بصورت همزمان

Threaded View

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

    نقل قول: سوال درباره ی اجرای چند نخی و استفاده از چند هسته بصورت همزمان

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    اول پروژه ای رو که نوشتم پیوست کنم تا بعد به مسائل مربوطه بپردازیم :

    ProcessThreads.rar

    بخاطر محدودیت های ماشین مجازی NET. نمیشه خیلی بصورت دقیق روی اجرای بازدهی نخ یا هسته ها متمرکز شد ولی این برنامه که نوشتم حداقل میتونه کارکرد کلی رو نشون بده :

    Preview.png
    خیلی ممنون استاد . زحمت کشیدید .
    الان این برنامه رو نوشتید تا هر وقت دکمه ی New Thread را میزنیم ، هر بار به مدت 20 ثانیه ، نخ جدیدی ساخته و پردازش میشه و وقتی مثلا دو بار این دکمه رو زدیم ، 2 نخ ساخته میشه و نشون بده عملکرد هر هسته و سوئیچ بین این نخ ها در هسته ها ، چجوری هه؟
    الان یعنی با این عکسی که گذاشتید ، اولا 2 نخ ساختید که مدام بین دو هسته ی منطقیِ پردازنده تون ، در حال سوئیچ کردن هست اما همزمان فقط در یک هسته ی منطقی در حال اجرا شدن هست (چون نمودار سبز رنگ ، در یک لحظه ، فقط در یک قسمت وجود داره) . درست میگم؟

    اما من همین برنامه تون را در کامپیوتر خودم اجرا کردم و نتیجه جور دیگه ای هست :














    اگه درکی که من از برنامه تون کردم ، درست باشه ، واسه ی من وقتی 3 نخ را اجرا میکنم ، همزمان 3 هسته ی فیزیکی (که برای من برابر با 3 هسته ی منطقی هم هست) را درگیر میکنه (یعنی 75 درصد از پردازنده رو پروسه ام اشغال میکنه حتی طبق آمار برنامه ی شما که عکسش مشخص هست و برخلاف عکسی که برای شما هست ، هست) .
    وقتی 2 نخ ایجاد کنم ، همزمان 2 هسته و اگه 4 نخ ، همزمان همه ی هسته ها را درگیر میکنه .

    میگم استاد ، شاید بخاطر این باشه که شما در قسمت پایینی برنامه تون ، فقط دو هسته (که نمیدونم فیزیکی هستن یا نه) را فقط تیک میزنید . همه ی هسته هاتون را تیک میزنید ، نتیجه شو ببینید چی میشه؟

    الان ، این به معماری پردازنده ی من فقط مربوط میشه؟
    اگه نه ، پس واسه ی شما چرا مثل من نیست و در یک لحظه ، فقط یک هسته ی منطقی را اشغال میکنه؟
    میتونم مدل دقیق پردازنده تون را بدونم؟ (اگه دوست دارین بگین)





    نقل قول نوشته شده توسط the king مشاهده تاپیک
    چند تا فرض اولیه دارید که درست نیستند. اول اینکه پردازنده مشغول پروسه برنامه شما بشه به معنی این نیست که داره با همون توان کد های نخ شما رو اجرا می کنه. فراموش نکنید که برنامه شما در ماشین مجازی قرار داره، بخش قابل توجهی از کاری که پردازنده برای پروسه شما انجام میده صرف تبادل بین ماشین مجازی و حقیقی میشه که اگر این بود سرعت اجرای کد های #C به حد متعارف C++‎‎‎‎‎‎‎‎ Native میرسید.
    که این کدهای clr یا ماشین مجازی را در Task Manager ، در سربرگ Performance ، بصورت Kernel Time مشخص میشه (قبلا گفته بودید) . درسته؟


    نقل قول نوشته شده توسط the king مشاهده تاپیک
    این رو از این بابت عرض می کنم که 50 درصد توان پردازنده صرف اجرای کد شما نشده، 50 درصد توانش گرفته شده تا فرضا کد شما را با دو برابر سرعتی که یک نخ برنامه شما رو اجرا می کرد اجرا کنه.
    نخ های شما از 50 درصد توان پردازنده استفاده نکردن، ولی سیستم عامل حداکثر میزانی که برای یک برنامه چند نخی ارائه میکنه تحویل داده.
    بله میدونم . ممنون

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    از طرف دیگه Task Manager اجرای همگام نخ ها رو به شما نشون نمیده. توان کلی صرف شده توسط پردازنده رو نشون میده، اونم با یک آمار غیر دقیق.
    منظورتون اینه که Task Manager ، مثل عکسی که از برنامه تون فرستادید ، نشون نمیده که همزمان ، فقط یک هسته داره روی پروسه مون پردازش انجام میده؟
    اگه آره ، خوب توی قسمت سربرگ Details میگه دیگه . مثلا میگه 25 درصد از توان پردازنده ، صرف پروسه مون داره میشه (حالا کدهای clr و اینها که گفتید ، میدونم و بماند) که این 25 درصد ، در 4 هسته ، میشه یک هسته بصورت همزمان دیگه .
    یا مثلا میگه 50 درصد که میشه 2 هسته بصورت همزمان و ... . درسته دیگه؟

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    Task Manager بهتون نمیگه که چقدر از توان پردازنده رو در حین سوئیچ کردن ها هدر میدید، شما اونها رو جزو کارایی کدتون حساب می کنید چون با اجرای یک نخی پردازنده مقایسه اش می کنید که انگار نخ یکنواخت اجرا میشه.
    در حالی که اگر سرعت اجرای نخ رو با سرعت بالا بررسی می کردیم دائم اجرا متوقف شده بود، این موارد ریز رو سیستم عامل نشون نمیده.
    بله ، خیلی خوب میشد اگه یه برنامه شبیه همچین چیزی که شما نوشتید رو Task Manager داشت . خیلی دقیق تر میشد به نکات ریز پی برد .
    اما همونطور که قبلا هم گفته بودید ، زمان سوئیچ کردن و هدر رفتن و سربار یک هسته ، برای ما و سیستم عامل ، مهم نیست چون به هر حال در اون زمان ، از دید سیستم عامل ، اون هسته در حالت اشغال قرار داره . چه در حال سوئیچ روی نخ ای باشه و چه منتظر رسیدن اطلاعات از کش یا رم باشه .


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


    سئوال بعدی اینکه چرا پروسه ی سی شارپ مون ، وقتی خودمون اصلا نخ ای درست نمیکنیم ، در برنامه ی Resource Monitor در قسمت Threads اش میگه بیش از 1 نخ داره؟ (معمولا بین 8 تا 15 نخ میگه داره) . اینها ، نخ هایی هست که خود clr ایجاد میکنه؟

    خیلی ممنون استاد از جواب تون
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: jpg 2.jpg‏ (93.1 کیلوبایت, 116 دیدار)
    • نوع فایل: jpg 3.jpg‏ (92.8 کیلوبایت, 115 دیدار)
    • نوع فایل: jpg 4.JPG‏ (12.9 کیلوبایت, 115 دیدار)
    آخرین ویرایش به وسیله SajjadKhati : سه شنبه 05 آذر 1398 در 18:14 عصر

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

  1. پاسخ: 1
    آخرین پست: چهارشنبه 13 بهمن 1395, 00:04 صبح
  2. پاسخ: 3
    آخرین پست: دوشنبه 27 خرداد 1392, 12:26 عصر
  3. سوال : ساخت پایگاه داده بصورت تک فایل مستقل بدون پسورد ؟!
    نوشته شده توسط mf.designing در بخش امنیت در SQL Server
    پاسخ: 2
    آخرین پست: پنج شنبه 29 فروردین 1392, 17:09 عصر

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

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