سلامی مجددبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط rbm برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
من هم خلاصه گفتم . کاملش که یه کتاب میشه .
مباحث نخ ها در برنامه نویسی .
اول اینکه سعی کنید اطلاعات را از تحقیقات بدست بیارید چون کاربران ، حتی حرفه ای هم در موارد متعددی یا در یک حوزه بی اطلاع هستند (و ندونند که بی اطلاع هستند) و یا ممکنه اشتباه کنند (و باز هم ندونند) .برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط rbm برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
مگر اینکه از یک استاد واقعا خبره سئوال کنید که باز هم این موارد اما در دوز پایین تر ، برای ایشون هم صادق هست .
حتی موارد قابل توجهی از منابع انگلیسی حتی از سایت های به ظاهر معتبر هم دیده شده که کاملا منطبق با واقعیت نیست .
چرا؟
چون کسی که حتی در منابع معتبر انگلیسی هم به عنوان تست کننده و بنچمارک گیرنده هست که از مباحث برنامه نویسی که مطلع نیست (یا دست و پا شکسته یه چیزهایی میدونه) .
حتی در راسته ی برنامه نویس ها هم خیلی ها از موارد و نکات جزئی مطلع نیستند .
=================================
درباره ی اینکه گفتید نتونستن کامل برنامه را بهینه کنن ، اسم این ، نتونستن نیست .
گفتم که خیلی از کارها در پروسه و برنامه ، فقط از تعداد محدودی هسته در اون لحظه (یا بازه ی زمانی خاص) استفاده میکنند . مثلا در بازه ی زمانی خاص ، از 3 هسته استفاده میکنند . شما اگه پردازنده ی 100 هسته ای هم داشته باشید ، در اون بازه ی زمانی که از 3 هسته استفاده میکنه ، هیچ فرقی با پردازنده ی 3 هسته ای نداره .
مگر اینکه فرکانس یا حافظه ی کش بیشتری داشته باشه که اون هم عملکردش را تا حدودی بالا میبره نه اینکه خیلی قابل توجه باشه.
اگه استفاده از میزان هسته ها ، بیش از حد انتظار اون کار در اون برنامه باشه ، شاید شما در Task Manager ببینید که میزان و درصدِ استفاده از پردازنده بیشتر شد (البته ممکنه هم این طور نباشه) ، اما در عمل ، کندتر از برنامه ای هست که از میزان کمتری از هسته های پردازنده استفاده میکنند .
در کل این رو یادتون باشه که برنامه نویس ها (مخصوصا شرکت های معتبر) ، سعی میکنند کمترین میزان استفاده از منابع سخت افزاری (از رم گرقته تا gpu و vram و ...) استفاده کنند . اهمیت این موضوع ، برای استفاده از cpu برای برنامه نویس ها ، بسیار بسیار بیشتر هست .
چون اگه کار و الگوریتمی باشه که در یک هسته بتونه کارش را انجام بده و اون قدر به کار بزرگی تبدیل نشده باشه که به چند کار بشه تقسیم اش کرد (تا در چند هسته اجرا بشه) ، معمولا سرعتش از الگوریتم با کارهای کوچیکتری که در هسته های مختلف اجرا میشن ، بیشتر هست .
=========================
در خیلی از موارد ، یک کار ممکنه به چند بخش (در واقع به چند نخ) تقسیم بشه اما محدودیت استفاده از منبع مشترک در حافظه ، نمیذاره و این ، یکی از بزرگترین مشکلات برای تقسیم وظایف در نخ های بسیار زیاد هست تا در هسته های بسیار زیاد اجرا بشه .
مثلا فرض کنید که 100 تا کارگر دارین و یک وظیفه ای تحت این عنوان دارین که با بیل ، بخواهند فقط یک کیسه ی سیمان را توی فرغون خالی کنند .
آیا هر 100 تا کارگر را یه بیل بهشون میدین که این کار را انجام بدن؟
با این فرض که چون 1 نفر ، ظرف مدت 10 دقیقه (600 ثانیه) ، یک کیسه ی سیمان را توی یک فرغون خالی میکنه ، پس 100 تا کارگر ، با هم ، ظرف مدت 6 ثانیه یک کیسه را خالی میکنند؟
یا در عمل اگه این کار را اگه انجام بدین ، بجای 10 دقیقه ، شاید 1 ساعت همون کاری که 1 نفر میخواست انجام بده ، طول میکشه؟
چون در این صورت ، شما هر 100 نفر را مجبور به انجام مشترکا یک کار کردید و هر لحظه ، یک نفر مجبور به انجام اون کار میشه و باید زمانی را صرف تعویض بین خودشون کنند چون 100 تا کارگر ، همزمان دور یک کیسه نمیتونن جمع بشن و مخصوصا اینکه کارشون با هم تداخل پیدا میکنه و مثلا بیل ها موقع ورود و خروج از کیسه ، به همدیگه برخورد میکنند و در بسیاری از اوقات نیاز هست که خیلی ها منتظر بمونن تا یک نفر بیل اش را وارد یا خارج کنه و بعد اونها وارد یا خارج کنن .
اما اگه بجای 100 نفر ، فقط 2 نفر را مامور انجام این کار کنین ، تقریبا زمان کارتون 2 برابر میشه (البته نه دقیقا 2 برابر . مثلا بجای 10 دقیقه ، 5 دقیقه و نیم کارشون تمام میشه ؛ نه دقیقا 5 دقیقه) . چون اون کار ، واقعا قابلیت تقسیم بین 2 نفر را داره چون کنار کیسه جا میشن و خروجی شون هر چند با هم اندکی تداخل پیدا میکنه (چون نباید موقع ورود و خروج بیل توی کیسه ، بیل ها به همدیگه برخورد کنند وگرنه یک نفر باید اندکی منتظر بمونه تا بیلِ اون یکی ، وارد یا خارج بشه) اما این تداخل ، خیلی نیست .
اما همین 2 نفر را اگه 3 نفر کنن ، به نظرتون در عمل ممکنه چند دقیقه طول بکشه؟
دیگه سرعت کار ، 3 برابر نمیشه . بلکه بجای 5 دقیقه و نیم ، مثلا نهایتا در 4 دقیقه کارشون انجام میشه (یعنی سرعت انجام کار نسبت به اضافه شدن یک کارگر که باید تا 3 دقیقه و 20 ثانیه میرسید ، فقط تا 4 دقیقه کمتر شده) .
کارگر چهارم که اضافه بشه ، ممکنه اصلا تاثیری نداشته باشه و یا خیلی کم تاثیر داشته باشه (مثلا ممکنه بجای 4 دقیقه ، ظرف 3 دقیقه و 30 ثانیه کارشون تمام بشه) .
اما از نفر پنجم به بعد که اضافه بشن ، بجای 3 دقیقه و 30 ثانیه که آخرین رکوردشون بود ، زمان اتمام کار ، همینطور بیشتر میشه . یعنی زمان اتمام کار 5 یا 6 یا 7 و ... تا 100 نفر کارگر ، بیشتر از 4 نفر هستند و هر چقدر که کارگرها بیشتر از حد نیاز بشن ، زمان اتمام کار هم بیشتر و بیشتر میشه .
در این مثال ، کارگر را جای هسته های پردازنده بذارید و کاری که میخوان انجام بدن (خالی کردن سیمان از کیسه) را جای کار مورد نظر در نخ های پروسه بذارید .
ضمنا ، اصلا علاوه بر اینها ، هر چقدر استفاده از تعداد هسته ها (نخ ها در برنامه نویسی) بیشتر بشه ، هماهنگی شون که بسیار بسیار امر مهمی هست ، بصورت تصاعدی سخت تر و هزینه ی نگه داری و توسعه ی برنامه را بیشتر میکنه .
=====================================
وقتی هم که بیش از یک هسته داره استفاده میکنه ، یعنی پردازش موازی داره انجام میده .
اینکه گفتید یه i7 نسل جدید ، فرق خاصی با پردازنده i5 نداشت ، اولا باید مدل پردازنده ها مشخص بشه و مخصوصا اینکه در چه نرم افزاری و با چه ابزاری و احیانا با چه پلاگین و در چه سطح کاربری ای استفاده میشده هم باید مشخص بشه (و مخصوصا اینکه بازه ی زمانی هم باید مشخص بشه) . و مخصوصا اینکه تست گرفته بشه .
اما بله ، در موارد قابل توجهی از نرم افزارها ، از 6 هسته استفاده میشه که یه پردازنده ی i5 چند نسل اخیر هم این تعداد هسته را داره . هر چند اختلاف دارند اما ممکنه تاثیرش بسیار کم و نا محسوس باشه .
اتفاقا ما یکی از مواردی که بارها به سایت شهر سخت افزار بابت معرفی سیستم گیمینگ تذکر میدیم ، همین مورد هست . فکر میکنند روی سیستم با اجرای بازی 4K ، پردازنده باید تعداد هسته ی بالاتر داشته باشه! حتی توی FHD اش هم این مورد چندان محسوس نیست .
ssd که بگیرن . من نگفتم که نگیرن .برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط rbm برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
ولی مخصوصا برای بودجه ی محدود ، 2 تاش در الویت نیست .
الویت اول افترافکت ، رم هست که بجای 2 تا ssd ، بهتره که یکی (با حجم بالاتر) و در صورت اضافه اومدن بودجه ، رم را بیشتر کنن .
ضمن اینکه کارت amd چندان برای نرم افزارها توصیه نمیشه . چون بعضی از نرم افزارها و پلاگین ها (نه همه شون) ، توسط درایور ، با هسته های cuda که مختص nvidia هست ، کار میکنند .
Bookmarks