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

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

Threaded View

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

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

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    چرا نمیشه، سر همین چیزی که میگید تامل کنید، وقتی یک هسته در حال سوئیچ کردن به نخ شما است، یا در حال انتقال وضعیت اجرایی برنامه شما به هسته دیگری است داره کد نخ شما رو اجرا می کنه؟ نه.
    چه هسته ای که داره وضعیت اجرایی بهش منتقل میشه و چه هسته ای که داره وضعیت اجرایی ازش منتقل میشه درگیر برنامه شما هستند، طبیعیه که چون وقتشون رو برنامه شما گرفته busy بودن شون رو پای برنامه شما بنویسند ولی این مواقع که کدی از نخ شما رو اجرا نمی کنند، فقط درگیر برنامه شما هستند. وقت و توان شون رو میگیره ولی یک عدد کد هم از نخ تون اجرا نمیشه. حالا این تعداد سوئیچ ها چقدر ئه؟ خیلی زیاد.
    هسته پردازنده که فقط دو حالت براش پیش نمیاد که یا نخ شما رو اجرا بکنه یا اصلا کاری به برنامه شما نداشته باشه، کاری که در مورد برنامه شما داره انجام میده که فقط اجرای نخ نیست.
    شما میخواهید از یک خونه به خونه دیگه اسباب کشی کنین با یک بشکن که وسایل خونه از این خونه نمیپرن وسط اتاق اون یکی خونه. پردازنده برای اینکار ها هم باید زمان صرف کنه.
    خیلی ممنون استاد .
    پس این طور که شما میگید ، در آنِ واحد (و در یک لحظه) ، تهش فقط دو هسته (ی منطقی یا فیزیکی) باید درگیر باشن . در همون لحظه ، حداقل کارکرد بقیه ی هسته ها ، حداقل اینکه باید پایین بیاد .
    بالاخره با این توضیحات تون ، نمیتونم قبول کنم که در یک لحظه ، بیش از دو هسته درگیر پروسه ام باشه . درصورتی که کد اول در پست اول را اگه در 4 نخ درون پردازنده ی من اجرا کنم ، پروسه ام ، حداقل بیش از 85 درصد پردازنده را اشغال میکنه (یعنی حداقل 3 هسته بصورت همزمان) و گاها تا 100 درصد هم میره که باعث میشه به مدت مدیدی حتی پردازنده ، به نخ مربوط به موس ام هم پاسخگو نباشه و رسم موس خیلی کند صورت بگیره .

    یا همون کد (اول در پست اول) را در پردازنده تون وقتی که 8 نخ کردید اجرا کنید ، باز هم باید آمار اشغال پردازنده تون بیش از 85 درصد (و شاید هم مثل من گاها تا 100 درصد) بره . وگرنه طبق گفته ی شما ، پروسه ی برنامه ، همزمان باید 2 هسته ی منطقی از پردازنده تون یعنی 25 درصد از پردازنده تون (یا تهش دیگه 2 هسته ی فیزیکی که میشه 4 هسته ی منطقی از پردازنده تون یعنی 50 درصد از پردازنده تون) را اشغال کنه .

    بعد اینکه اگه وقتی از کلاس Thread کدمون را اجرا میکنیم ، کدمون فقط درون یک هسته (بصورت همزمان) اجرا میشه ، پس نباید وقتی که درون Task Manager روی پروسه مون کلیک راست و Set Affinity را روی یک هسته فقط ست میکنیم ، کارایی هر تعداد نخ ای که میسازیم ، متفاوت باشه . درسته؟
    اما وقتی این کار را کنید و کد اول در پست اول را که دادم اجرا کنید ، میبینید زمان اجراش 2 برابر بیشتر طول میکشه .
    این دلیل هم کافی نیست که وقتی از کلاس Thread استفاده میکنیم ، به همون تعدادِ نخ مون ، توی چند هسته ی منطقی (و فیزیکی) بصورت همزمان اجرا میشن؟

    در آخر پست 20 هم یه قضیه ی دیگه را هم اضافه کرده بودم :

    "
    قضیه ی بعدی اینکه من وقتی توی پردازنده ام 4 نخ ایجاد میکنم (مثلا کد اول در پست اول را در 4 نخ اجرا میکنم) ، چون کارکرد پردازنده گاها تا 100 درصد میرسه (نمیدونم چرا گاها تا 85 و گاها تا 95 و گاها تا 99 و حتی گاها تا 100 درصد کارکرد پردازنده میره) ، یعنی در واقع اون مواقعی که کارکردش تا 100 درصد میرسه ، سیستم ام کم میاره و حتی موس رو هم بخوبی نمیتونم حرکت بدم و بصورت واضح موسم بسیار کند حرکت میکنه . خوب اگه توی یه هسته کدم بصورت همزمان اجرا میشد ، پس 3 هسته ی دیگه ام آزاد میبود و دیگه پردازش نخ مربوط به عملیات موس که نباید با مشکل کندی شدید رو به رو میشد .
    "


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


    90 رو گفتید از 30 * 3 بدست آوردید، این 30 درصد رو از روی چی حساب کردید؟
    به این موارد توجه نمی کنید. سیستم عامل داره پاسخگوی نیاز یک عالمه برنامه میشه که برنامه شما صرفا یکی از اونها است. برای اینکه بتونه پاسخگوی نیاز سایر پروسه ها باشه ناچاره نخ های شما رو متوقف کنه. هر چقدر تلاش کنید بیشتر ازش پاسخگویی بگیرید همونقدر سربار بیشتری تحمیل میشه، شما که نمیتوانید 4 هسته رو تخصیص بدید به پروسه برنامه خودتون و بقیه پروسه ها رو در نظر نگیرید. وقتی شما تعداد نخ ها رو افزایش میدید سیستم عامل برای اینکه بتونه هسته آزاد پیدا کنه مجبور میشه دائم نخ ها رو به حالت تعلیق ببره و هی سوئیچ بین هسته ای انجام بده.


    اولا مایکروسافت ادعا نکرده هر چی هسته روی پردازنده هست رو برای اجرا در Parallel بکار میبره، شما جایی همچین چیزی خوندین؟ در ضمن Parallel معجزه که نمیتونه بکنه، قدری از محدودیت های NET. کم می کنه، وگرنه از اساس معماری ماشین مجازی NET. رو تغییر نمیده.
    در مستنداتش هم با اجرای ساده در همون تک نخ مقایسه شده که فرضا اجراش 4 برابر سریعتر شده، با احرای چند نخی مقایسه نشده. اونم میگه متناسب با افزایش تعداد هسته (proportionately) بهبود کارایی نشون میده، نمیگه نسبت به اجرای چند نخی بهبود کارایی آنچنانی نشون میده.

    از طرف دیگه ما که نمیدونیم چقدر این نخ ها بهم وابسته هستند، نمیدونیم که چقدر به هماهنگی با هم نیاز دارند، از چیزی که در ماشین مجازی میگذره که خبر نداریم. نمیدونیم کدوم کد ها و کدوم نخ های هماهنگ کننده سربار ایجاد می کنند.
    فقط یکسری توصیه هایی اینور و اونور پیدا میشه که شاید کمک کنه برای نوشتن کد های مناسبتر.
    وقتی یه هسته ی فیزیکی را 100 درصد بگیم که کارایی داره ، حالا وقتی که یه کدی که همزمان از 2 هسته ی فیزیکی استفاده میکنه و در صورتی که بهینه باشه و مناطق بحرانی نداشته باشه (یعنی همزمان چند هسته نخوان از حافظه ی مشترکی بخونن یا بنویسن) ، در این شرایط ، از اون 100 درصدِ کارایی هر هسته (ی فیزیکی) ، حداقل 30 درصد بازدهی داره که (یه چیزهای سطحی خوندم و فکر کنم قانونی بنام amdh نمیدونم چی چی اینو میگه) . اگه کد ، نقاط بحرانی نداشته باشه و یا خیلی کم داشته باشه ، و هر هسته بخواد 30 درصد از کاراییِ 100 درصدش را هم نداشته باشه که اصلا پردازنده ی چند هسته ای واسه چی بسازن؟
    در این صورت حتی با 4 برابر شدن هسته ، پردازش و کارایی ، به کمتر از 2 برابر میرسه . (قبول دارم کد بهینه نباشه ، کارایی بصورت همزمان و در چند هسته ، حتی کم هم ممکنه بشه . منظورم روی کد کاملا بهینه هست) .

    بله میدونم در کلاس Parallel ، ممکنه در چند هسته بصورت همزمان اجرا بشه . ممکنه هم نشه .
    خیلی ممنون استاد .
    از دوست مون هم بابت مطلبش متشکرم .
    آخرین ویرایش به وسیله SajjadKhati : چهارشنبه 06 آذر 1398 در 09:00 صبح

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

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

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

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