معماری پردازنده

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون.
استاد ، میگم نرم افزارهای ۳ بعدی مثل cinema 4d ، موقع رندر ، یک فریم و تصویری را به چندین بخش تقسیم میکنن . این باعث میشه که اون نرم افزار ، از تمام هسته های پردازنده ، برای پردازش و رندر استفاده کنه.
حالا سئوالم اینجاست که چرا نرم افزارهایی مثل افترافکت این کار را موقع رندر انجام نمیدن تا بتونن از همه ی هسته ها استفاده کنه؟
 

the_king

مدیرکل انجمن
خیلی ممنون.
استاد ، میگم نرم افزارهای ۳ بعدی مثل cinema 4d ، موقع رندر ، یک فریم و تصویری را به چندین بخش تقسیم میکنن . این باعث میشه که اون نرم افزار ، از تمام هسته های پردازنده ، برای پردازش و رندر استفاده کنه.
حالا سئوالم اینجاست که چرا نرم افزارهایی مثل افترافکت این کار را موقع رندر انجام نمیدن تا بتونن از همه ی هسته ها استفاده کنه؟
مطمئن نیستم اما احتمال داره بخاطر دشواری حفظ سازگاری با codec های صوتی تصویری یا پلاگین هایی که در حال حاضر داره و با پردازش موازی سازگار نیستند باشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد .
استاد ، میگم در Task Manager که در بخش Memory ، یه جا نوشته Committed ، این Committed همون حافظه ی مجازی (که سیستم عامل ، معمولا درایوی که ویندوز توش نصب هست را به عنوانِ بخشی از حافظه ی رم در نظر میگیره) هست دیگه . درسته؟

این رو از اونجایی میگم که در Resource Manager ، در سربرگ Memory ، در قسمت Process ، یه ستون به نام Commit هست که در توضیحاتش نوشته حافظه ی مجازی هست .
نمیدونم چرا اسمش را Commit گرفتن . مثلا چرا همونطور که حافظه ی فیزیکی را physical memory گرفتن ، این رو مثلا virtual memory نگرفتن؟

اما اگه این Committed در Task Manager همون حافظه ی مجازی هه ، پس کلا تفسیرش چجوری هه؟
مثلا در عکس زیر :

1.JPG

اون Committed را برام نوشته 3/4/9/1 GB .
این یعنی چی؟
یعنی الان حافظه ی مجازی من ، چقدر در حال حاضر در نظر گرفته شده؟
آخر ، 1 گیگ هست ، 9 یا 4 یا 3 گیگ؟

بعد ، اونجایی که نوشته in use (Compressed . اون Compressed که 27.9 مگابایت هست ، یعنی چی؟
همچنین اون paged pool و non paged pool ها چی اند؟
تشکر استاد .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
استاد ، میگم در Task Manager که در بخش Memory ، یه جا نوشته Committed ، این Committed همون حافظه ی مجازی (که سیستم عامل ، معمولا درایوی که ویندوز توش نصب هست را به عنوانِ بخشی از حافظه ی رم در نظر میگیره) هست دیگه . درسته؟
نه. در Committed تفکیکی روی اینکه از Disk یا RAM تامین شده وجود نداره. اون تفکیک از دید خود سیستم عامل ئه، از دید پروسه پنهان ئه.
Committed حافظه ای است که سیستم عامل برای اون پروسه رزرو کرده که ممکنه یک بخشی اش در این لحظه واقعا توسط پروسه در حال استفاده نباشه، یعنی مازاد بر نیاز پروسه باشه، اما به هر حال سیستم عامل به اون پروسه اختصاص داده و سایر پروسه ها نمی توانند از اون بخش حافظه Committed سایر پروسه ها استفاده کنند. مثل اختصاص هر قسمت از پارکینگ به یک واحد از آپارتمان، ممکنه اون بخش از پارکینگ الان خالی باشه اما به هر حال اختصاص داده شده به اون واحد فلان.

این رو از اونجایی میگم که در Resource Manager ، در سربرگ Memory ، در قسمت Process ، یه ستون به نام Commit هست که در توضیحاتش نوشته حافظه ی مجازی هست .
نمیدونم چرا اسمش را Commit گرفتن . مثلا چرا همونطور که حافظه ی فیزیکی را physical memory گرفتن ، این رو مثلا virtual memory نگرفتن؟
اشتباه تون اونجا است که Virtual Memory رو معادل حافظه ای در نظر گرفته اید که از RAM تامین نشده. اینطور نیست. کلا حافظه ای که سیستم عامل به پروسه ها تحویل میده Virtual Memory ئه، چه کاملا از RAM تامین شده باشه و چه کاملا از دیسک و چه مخلوطی از این دو.
در ویکی پدیا نمودار Virtual Memory رو ببینید.

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

اما اگه این Committed در Task Manager همون حافظه ی مجازی هه ، پس کلا تفسیرش چجوری هه؟
مثلا در عکس زیر :

مشاهده پیوست 113869

اون Committed را برام نوشته 3/4/9/1 GB .
این یعنی چی؟
کاراکتر ممیز اعداد اعشاری سیستم تون روی / تنظیم شده وگرنه همون 3.4/9.1 ئه.
یعنی 3.4 گیگابایت از کل حافظه مجازی در سیستم (چه RAM و چه غیر RAM) الان Commit شده و با ابعاد فعلی Paging File روی دیسک تا 9.1 گیگابایت هم میتونه برسه، یعنی ظرفیت حافظه مجازی فعلا 9.1 گیگابایت ئه.

بعد ، اونجایی که نوشته in use (Compressed . اون Compressed که 27.9 مگابایت هست ، یعنی چی؟
از قابلیت ویندوز 10 در فشرده سازی Page ها استفاده کرده تا بخشی از Page ها بجای اینکه به دیسک منتقل بشن بصورت فشرده روی RAM باقی بمونند. هدف اینکه که RAM برای استفاده سایر پروسه ها قدری خالی بشه، بجای اینکه با عملیات کند روی دیسک منتقل شون کنه سریعتر در همون RAM فشرده شون می کنه تا جای کمتری بگیره. حجمش 27.9 مگابایت شده.

همچنین اون paged pool و non paged pool ها چی اند؟
در لایه هسته سیستم عامل بخشی از حافظه RAM مورد استفاده سیستم عامل و درایور ها رو نمیشه به دیسک منتقل کرد و باید همیشه در همون حافظه RAM بمونند، معمولا بخش هایی که در هر لحظه باید در دسترس و سرجاشون باشند. اونها non paged pool هستند، نمیشه Page روی دیسک شون کرد. اما بقیه یعنی بخش paged pool لازم نیست که حتما همیشه روی RAM باشند، این امکان رو دارند که اگه لازم شد حافظه RAM قدری خالی بشه موقتا به دیسک منتقل شون کرد.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
آها . خیلی ممنون استاد :rose:
طبق گفته تون ، من این برداشت را کردم . ببینید درسته؟ :

اینکه اولا حافظه ی مجازی ، صرفا اون حافظه ای نیست که از هارد یا ssd (کلا حافظه ای غیر از حافظه ی فیزیکی) تامین شده باشه بلکه حافظه ی مجازی ، ترکیبی از حافظه ی فیزیکی و حافظه ای هست که از هارد یا ssd (همون page file) ، سیستم عامل این حافظه را (برای استفاده ی پروسه ها) تامین میکنه (یا گاها میتونه فقط حافظه ی فیزیکی یا فقط حافظه ی هارد یا ssd باشه که البته کم پیش میاد) .

دوم اینکه اون commited ، همون حافظه ی مجازی هست .
اولین بخش از commited (که در تصویر بالا مقدار 3.4 گیگابایت هست) ، نشون میده که در حال حاضر ، مقدار استفاده از حافظه ی مجازی توسط کل پروسه ها و سیستم عامل ، چقدر هست .
درسته؟

پس به این ترتیب ، میشه با تفریق کردنِ اولین مقدار از commited (مقدار 3.4 گیگ در تصویر بالا) ، از مقدار حافظه ی فیزیکی ای که در حال حاضر استفاده میشه (مقدار 3.2 گیگابایت در تصویر بالا) ، حجم حافظه ای که به عنوان page file که در هارد یا ssd (به عنوان بخشی از حافظه ی مجازی) در حال حاضر استفاده میشه را بدست آورد . درسته؟

یعنی در تصویر بالا ، در حال حاضر ، 200 مگابایت از ssd ام به عنوان بخشی از حافظه ی مجازی داره استفاده میشه . درسته؟

------------------------------------------

سئوال دیگه اینکه ، خوب اگه تنظیمات حافظه ی مجازی سیستم عامل ، روی حالت اتوماتیک (مثلا در درایو c) تنظیم شده باشه ، پس تا جایی که در درایو c فضای خالی وجود داشته باشه ، باید بتونه حافظه ی مجازی تهیه کنه ازش . درسته؟

اگه آره و تا جایی که درایو c فضای خالی داره ، پس نرم افزارهایی که نیاز به حجم حافظه ی زیادی میخوان ، و حافظه ی فیزیکیِ طرف هم کم هست ، نباید سیستم عامل یا اون نرم افزار ارور بده که حجم حافظه کم هست (و دیگه اون نرم افزار کار نکنه و خارج بشه) .

الان من در افترافکت ، با یه پلاگینی کار میکنم که (در صورت تنظیم یک مورد در این پلاگین) ، نیاز به رم بسیار زیادی داره (احتمالا در حد بیش از 20 گیگ) اما حافظه ی فیزیکی من 8 گیگ هست . اما تنظیمات حافظه ی مجازیِ ویندوزم روی حالت اتوماتیک هست و روی درایو c تنظیم شده و این درایوِ c هم حدود 70 گیگ خالی داره .
پس چرا اون مقدار حافظه ای که نیاز داره ، سیستم عامل بقیه اش را نمیتونه از تمامِ فضای خالیِ درایو c به عنوان page file برای تامینِ حافظه ی مورد نظرِ افترافکت استفاده کنه و ارور میده؟

آیا بجای اینکه تنظیمات حافظه ی مجازی و page file را در ویندوز روی اتوماتیک تنظیم کنیم ، خودمون شخصا مقدار خاصی را تعیین کنیم (مثلا مقدار 70 گیگ) ، باعث میشه ویندوز اگه افترافکت نیاز داره ، تا مقدار 70 گیگ را به عنوان حافظه ی مجازی بتونه استفاده کنه و بنابراین ارور نده که حافظه تون کم هست (و خارج بشه از افترافکت) ؟

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

تشکر استاد .
 

the_king

مدیرکل انجمن
اینکه اولا حافظه ی مجازی ، صرفا اون حافظه ای نیست که از هارد یا ssd (کلا حافظه ای غیر از حافظه ی فیزیکی) تامین شده باشه بلکه حافظه ی مجازی ، ترکیبی از حافظه ی فیزیکی و حافظه ای هست که از هارد یا ssd (همون page file) ، سیستم عامل این حافظه را (برای استفاده ی پروسه ها) تامین میکنه (یا گاها میتونه فقط حافظه ی فیزیکی یا فقط حافظه ی هارد یا ssd باشه که البته کم پیش میاد) .
بله.
دوم اینکه اون commited ، همون حافظه ی مجازی هست .
همون که نیست، این دو عبارت معادل هم نیستند که بگید همونه. می توانید بگید commited از حافظه مجازی تامین میشه یا مقدارش بخشی از حافظه مجازی رو تفکیک می کنه.
اولین بخش از commited (که در تصویر بالا مقدار 3.4 گیگابایت هست) ، نشون میده که در حال حاضر ، مقدار استفاده از حافظه ی مجازی توسط کل پروسه ها و سیستم عامل ، چقدر هست .درسته؟
خیر. توضیحات Commited رو مجددا بخونید، وقتی میگید مقدار استفاده (In use) رو نشون میده یعنی تعریف Commited رو نخوندید. نمیشه که بگید چیزی استفاده شده ولی بخشی اش استفاده نشده.
پس به این ترتیب ، میشه با تفریق کردنِ اولین مقدار از commited (مقدار 3.4 گیگ در تصویر بالا) ، از مقدار حافظه ی فیزیکی ای که در حال حاضر استفاده میشه (مقدار 3.2 گیگابایت در تصویر بالا) ، حجم حافظه ای که به عنوان page file که در هارد یا ssd (به عنوان بخشی از حافظه ی مجازی) در حال حاضر استفاده میشه را بدست آورد . درسته؟
تفریق تون مشکلی نداره اما چیزی که به دست میاد باز بخشی از Commited ئه و در نتیجه ممکنه بخشی اش استفاده شده باشه و بخشی اش نشده باشه. هر چیزی که در Commited هست که الزاما استفاده نشده. Commited معادل In use نیست. براتون پارکینگ آپارتمان رو هم مثال زدم.
یعنی در تصویر بالا ، در حال حاضر ، 200 مگابایت از ssd ام به عنوان بخشی از حافظه ی مجازی داره استفاده میشه . درسته؟
نمیدونم SSD ئه یا هارد دیسک اما به هر حال تخصیص یافته، استفاده شدن یا نشدنش مشخص نمیشه.
سئوال دیگه اینکه ، خوب اگه تنظیمات حافظه ی مجازی سیستم عامل ، روی حالت اتوماتیک (مثلا در درایو c) تنظیم شده باشه ، پس تا جایی که در درایو c فضای خالی وجود داشته باشه ، باید بتونه حافظه ی مجازی تهیه کنه ازش . درسته؟
بله. اون فایل pagefile.sys در ریشه درایو :C طبعا فضا لازم داره.
اگه آره و تا جایی که درایو c فضای خالی داره ، پس نرم افزارهایی که نیاز به حجم حافظه ی زیادی میخوان ، و حافظه ی فیزیکیِ طرف هم کم هست ، نباید سیستم عامل یا اون نرم افزار ارور بده که حجم حافظه کم هست (و دیگه اون نرم افزار کار نکنه و خارج بشه) .
حافظه روی هارد دیسک جایی برای ذخیره موقت تکه های حافظه RAM میشه، نه اینکه بجای حافظه RAM قابل استفاده باشه.
اگر سیستم عامل بخواد با دیسک به شیوه ای که با حافظه RAM تعامل داره کار کنه، اجرای هر فرمان چند صد برابر کند میشه.
وقتی حافظه RAM کم بیاد، سیستم عامل تلاش می کنه با انتقال موقت اون تکه هایی از RAM که فعلا بهشون نیازی نیست روی دیسک، فضای خالی RAM رو قدری بیشتر کنه، وگرنه CPU که نمیتونه نتیجه جمع دو تا عدد رو بجای یک خونه از RAM روی هارد دیسک ذخیره کنه، همون انتقال نتیجه به دیسک یک عالمه فرمان میخواد و با کلی معطلی. همچین کاری نمیکنه چون کاربردی نیست، دیسک نمیتونه جایگزین RAM باشه. اگر پردازنده الان برای اجرای یک روال به فلان قدر حافظه نیاز داره باید حافظه RAM بهش داده بشه تا پردازنده بتونه ازش استفاده کنه، حافظه دیسک که بدرد دستورات ماشین پردازنده نمیخوره. اگر حافظه RAM به قدر کافی موجود نباشه و امکان خالی کردنش هم نباشه طبعا سیستم عامل کاری از دستش بر نمیاد.
الان من در افترافکت ، با یه پلاگینی کار میکنم که (در صورت تنظیم یک مورد در این پلاگین) ، نیاز به رم بسیار زیادی داره (احتمالا در حد بیش از 20 گیگ) اما حافظه ی فیزیکی من 8 گیگ هست . اما تنظیمات حافظه ی مجازیِ ویندوزم روی حالت اتوماتیک هست و روی درایو c تنظیم شده و این درایوِ c هم حدود 70 گیگ خالی داره .
پس چرا اون مقدار حافظه ای که نیاز داره ، سیستم عامل بقیه اش را نمیتونه از تمامِ فضای خالیِ درایو c به عنوان page file برای تامینِ حافظه ی مورد نظرِ افترافکت استفاده کنه و ارور میده؟
فرض کنید اون پلاگین بخواد یک آرایه به طول n گیگابایت ایجاد کنه و داخلش یکسری داده بخونه و بنویسه. پردازنده دائم باید یک خونه حافظه رو بخونه و در یک خونه حافظه بنویسه. می توانید تصور کنید که خوندن و نوشتن اون آرایه روی RAM چقدر با سرعت خوندن و نوشتن روی دیسک تفاوت سرعت داره؟
اگر میخواست بجای RAM با دیسک کار کنه سرعتش فاجعه میشد. وقتی اونقدر حافظه RAM موجود نباشه، فضای خالی دیسک کمکی نمی کنه.
آیا بجای اینکه تنظیمات حافظه ی مجازی و page file را در ویندوز روی اتوماتیک تنظیم کنیم ، خودمون شخصا مقدار خاصی را تعیین کنیم (مثلا مقدار 70 گیگ) ، باعث میشه ویندوز اگه افترافکت نیاز داره ، تا مقدار 70 گیگ را به عنوان حافظه ی مجازی بتونه استفاده کنه و بنابراین ارور نده که حافظه تون کم هست (و خارج بشه از افترافکت) ؟
خیر.
اگه این روال نشدنی هست ، پس یعنی سیستم عامل در استفاده از حافظه ی page file (به عنوان بخشی از حافظه ی مجازی) ، محدودیتی قائل میشه . پس روال این محدودیت چجوری هست و چرا این محدودیت را میذاره؟
شاید بگین محدودیت اش بخاطر اینه که استفاده از page file ئه بیشتر ، به همون میزان ، باعث کاهش سرعت میشه . بله . اما یه نفر مثل ما وقتی حافظه ی فیزیکیِ کمی داره و دلش میخواد با تنظیم کردن page file ، بخواد با قبولِ کاهش سرعت ، از تمام ظرفیت برای حافظه ی page file ، استفاده کنه .
حافظه در دستورات زبان ماشین پردازنده نقش مشخص و ثابتی داره، حافظه ای که با پردازنده در اون دستورات تعامل داره RAM ئه، SSD و هارد دیسک در دستورات زبان ماشین نقشی ندارند. صحبت کاهش سرعت نیست، کاهش سرعت نمیتونه توصیف اتفاقی که می افته باشه، پردازنده عملا سکته می کنه. پردازنده صرفا با یک دستور به سرعت داده از رجیستر به حافظه RAM انتقال میده یا از حافظه RAM در رجیستر مقدار میخونه و ...
اگه بخواد همچین کاری رو با هارد دیسک و SSD شبیه سازی کنه هم باید کلی فرمان رو بجای اون یک فرمان اجرا کنه که شبیه کد اصلی پروسه نیست و باید از قبل همچین کدی نوشته میشد و هم سرعت و تاخیر RAM با SSD و هارد دیسک قابل مقایسه نیستند. منطقی و کاربردی نیست.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد از توضیحات کامل تون :rose:
الان من یه کم دقیق متوجه نشدم .
منظورتون اینه که در تصویری که دادم ، اون جایی که نوشته In Use (که حجمش 3.2 گیگابایت هست) ، همون حافظه ی مجازی مون (ترکیبی از حافظه ی فیزیکی و page file) هست که در حال حاضر ، این مقدار از حافظه در حال استفاده شدن هست؟

اگه آره ، ولی در دیاگرامِ بالاش که نوشته Memory Usage (و In Use هم بخشِ صورتیِ اوان نمودار هست) ، مقدارش برابر با حجم حافظه ی فیزیکی ام هست . یعنی مقدار Memory Usage را زده 7.9 گیگ که برابر با حجم حافظه ی فیزیکی ام هست .

--------------------------------------------

الان منظورتون اینه که وقتی پردازنده ، در حال فرآیند و پردازشِ کدی هست ، در اون لحظه اگه هر حجم از حافظه ای را طلب کنه ، باید اون مقدار از حافظه ، در ram خالی باشه تا در دسترس اش باشه چون پردازنده دستوراتش را نمیتونه درون هارد بریزه .
در این زمان ، سیستم عامل پاسخگو نیست و نمیتونه حافظه را برای پردازنده ، مدیریت کنه . در واقع دسترسی پردازنده ، از سیستم عامل ، بالاتر هست .

اما اگه کدی که قبلا پردازش شده بود و اطلاعاتش را در رم ذخیره کرد ، سیستم عامل اون اطلاعات را میتونه موقتا از رم توی page file منتقل کنه تا موقتا فضای خالی در رم برای ذخیره ی اطلاعاتی که همین الان پردازنده در حالِ پردازشِ اون کد هست ، باز بشه .
درست گفتم؟

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


--------------------------------------

بعد اینکه استاد ، حافظه ی ssd الان سرعتش خیلی کمتر از رم نیست (چون گفتید چند صد برابر نسبت به رم سرعتش کمتره) .
الان سرعت خوندن (و تا حد زیادی هم نوشتن) در ssd ، حدود 550 مگابایت هست .
سرعت رم هم برای من که ddr3 هست ، 1600 مگاهرتز هست که اگه اشتباه نکنم ، برابر با 1600 مگابایت بر ثانیه میشه . حالا دو کاناله بودنشون را هم در نظر بگیریم ، حدود 6 برابر سرعتِ کمتر میشه .
این طور نیست؟

کلا یه کم گیج شدم .
تشکر استاد
 

the_king

مدیرکل انجمن
خیلی ممنون استاد از توضیحات کامل تون :rose:
الان من یه کم دقیق متوجه نشدم .
منظورتون اینه که در تصویری که دادم ، اون جایی که نوشته In Use (که حجمش 3.2 گیگابایت هست) ، همون حافظه ی مجازی مون (ترکیبی از حافظه ی فیزیکی و page file) هست که در حال حاضر ، این مقدار از حافظه در حال استفاده شدن هست؟
خیر، منظورم چیزی بود که نوشتم. هر جا که Commited رو مقدار استفاده در نظر بگیرید نتیجه هر چی باشه اشتباهه. در حال استفاده عبارت In use ئه و Commited هم معادل همچین چیزی نیست. در تعریف Commited عرض کردم که رزرو شده، ولی ممکنه توسط پروسه در حال استفاده نباشه. وقتی چیزی الزاما در حال استفاده نیست چطور بر اساسش مقدار استفاده شده محاسبه می کنید؟
برای همین "اولین بخش از commited نشون میده که ... مقدار استفاده از حافظه ی مجازی" یا "تفریق کردنِ اولین مقدار از commited ... حجم حافظه ای که ... استفاده میشه" و هر مورد این چنینی مستقل از اینکه نتیجه اش چی باشه اشتباهه. از روی Commited در حال استفاده در نمیاد.

--------------------------------------------
الان منظورتون اینه که وقتی پردازنده ، در حال فرآیند و پردازشِ کدی هست ، در اون لحظه اگه هر حجم از حافظه ای را طلب کنه ، باید اون مقدار از حافظه ، در ram خالی باشه تا در دسترس اش باشه چون پردازنده دستوراتش را نمیتونه درون هارد بریزه .
در این زمان ، سیستم عامل پاسخگو نیست و نمیتونه حافظه را برای پردازنده ، مدیریت کنه . در واقع دسترسی پردازنده ، از سیستم عامل ، بالاتر هست .
چی میگید؟ پردازنده نمیتونه با هیچ سخت افزار خارجی به شیوه ای که با RAM تعامل داره کار کنه، چه کند باشه و چه سریع. برای همین هیچ چیزی جای RAM رو نمیتونه بگیره. پردازنده و حافظه منابع سیستم عامل هستند، یعنی چی که دسترسی پردازنده بالاتر از سیستم عامل باشه؟
مدیریت حافظه همیشه وظیفه سیستم عامل ئه، و نمیتونه معجزه کنه، نمیتونه RAM اضافی بسازه، نمیتونه SSD رو به RAM تبدیل کنه.
وقتی در اجرای کدی در پردازنده تلاش برای دسترسی به یک تکه حافظه ناموفق باشه با خطای Page Fault سیستم عامل مداخله میکنه.
اما اگه کدی که قبلا پردازش شده بود و اطلاعاتش را در رم ذخیره کرد ، سیستم عامل اون اطلاعات را میتونه موقتا از رم توی page file منتقل کنه تا موقتا فضای خالی در رم برای ذخیره ی اطلاعاتی که همین الان پردازنده در حالِ پردازشِ اون کد هست ، باز بشه .
درست گفتم؟
بله، به شرطی که اون پروسه دیگه در حال اجرا نباشه، تعلیق شده باشه، چون وقتی یک پروسه در حال اجرا است که نمیشه حافظه ای که کدش داره استفاده می کنه رو ازش گرفت. در ضمن اون یکی پروسه هم حق اجرا داره، به مدت طولانی که تعلیق نمیشه، به محض اینکه دوباره نوبت اجراش برسه و حافظه اش رو بخواد باید عکس این قضیه تکرار بشه. که نتیجه اش کند شدن عکس العمل و کاهش کارایی شدید سیستم ئه.
اگه این طور باشه ، پس برای اینکه این نوع ارور ها را نگیریم ، صرفا اون مقدار از حافظه ی خالی در رم مهم هست که پردازنده در حال پردازش اون کد هست . (نه اون کدهایی که قبلا پردازش کرد) .
درسته؟
مهم؟ تعداد زیادی پروسه در صف اجرا هستند که پردازنده در حال اجرای کد شون نیست ولی حافظه شون رو چند لحظه بعد که نوبت اجراشون میرسه لازم دارند. اگر سیستم عامل بخواد دائم برای جور کردن حافظه اینها با دیسک کلنجار بره و به دردسر بیافته بیشتر زمان به انتقال داده میگذره نه اجرای کد.
بعد اینکه استاد ، حافظه ی ssd الان سرعتش خیلی کمتر از رم نیست (چون گفتید چند صد برابر نسبت به رم سرعتش کمتره) .
الان سرعت خوندن (و تا حد زیادی هم نوشتن) در ssd ، حدود 550 مگابایت هست .سرعت رم هم برای من که ddr3 هست ، 1600 مگاهرتز هست که اگه اشتباه نکنم ، برابر با 1600 مگابایت بر ثانیه میشه . حالا دو کاناله بودنشون را هم در نظر بگیریم ، حدود 6 برابر سرعتِ کمتر میشه .
اولا فرکانس حافظه یک چیز ئه، نرخ انتقال یک چیز دیگه، ثانیا برای بررسی نرخ انتقال هم باید از ابزار های Benchmark استفاده کنید.
ثالثا من سرعت RAM رو با SSD مقایسه نکردم، نوشته من رو بخونید. کجا نوشتم SDD چند صد برابر نسبت به RAM سرعتش کمتره؟
گفتم اگر سیستم عامل بخواد با دیسک مشابه RAM برخورد کنه چند صد برابر کند میشه.
حتی اگر سرعت SDD از RAM هم بیشتر بود، SDD/ Hard Disk سخت افزار خارجی هستند، حافظه ولی مستقیما با پردازنده در ارتباط ئه، پردازنده فقط یا یک دستور با حافظه RAM تبادل داده میکنه، ولی باید یکسری کد در درایور اجرا بشه تا درخواستی به SDD/ Hard Disk برسه و بعد پردازنده بره سراغ کار دیگری و منتظر بشه تا سیگنال دریافت کنه که داده حاضر شده و تازه بعد داده رو انتقال بده به حافظه RAM یا رجیستری تا بتونه در ادامه ازش استفاده کنه. یعنی سر هر چند بایت داده که در یک دستور لازمه باید این روال و یکسری سیکل پردازنده هدر بره، مستقل از اینکه سرعت پاسخگویی اون رسانه چقدر ئه.
این طور نیست؟
خیر. اینطور نیست.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد از جواب کامل تون .
ولی من همچنان اندکی گیج میزنم :green:
الان استاد ، اونجایی که نوشته In Use (و مقدارش در تصویر 3.2 گیگ هست) ، این ، همون تنها حافظه ی فیزیکی هست یا حافظه ی مجازی هست؟


استاد ، قالب قبلی انجمن بهتر نبود؟
چون با کد بود ، قشنگ میشد کپی و paste کرد و جاهای مختلفی را چند بار نقل قول کرد . این قالب ، کد نداره و نقل قول به این شیوه سخت هه .

تشکر استاد .
 

the_king

مدیرکل انجمن
الان استاد ، اونجایی که نوشته In Use (و مقدارش در تصویر 3.2 گیگ هست) ، این ، همون تنها حافظه ی فیزیکی هست یا حافظه ی مجازی هست؟
فقط حافظه RAM ئه، بخشی از اون 8.0GB DDR3 ئه.
استاد ، قالب قبلی انجمن بهتر نبود؟
چون با کد بود ، قشنگ میشد کپی و paste کرد و جاهای مختلفی را چند بار نقل قول کرد . این قالب ، کد نداره و نقل قول به این شیوه سخت هه .
این قالب هم کد داره. سه نقطه (تنظیمات بیشتر)، "تغییر به حالت BB code"
در ضمن در همین حالت هم اگر وسط یک نقل قول Enter کنید خیلی ساده نقل قول تقسیم میشه و جا باز می کنه برای پاسخگویی.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد (البته نیاز به بررسی های بیشتر دارم برای پست های بالاتون تا کامل تر درک کنم) .
استاد ، میگم چرا در بعضی از نرم افزار یا موتور رندر یا پلاگین هایی که هم توسط cpu و هم gpu رندر میکنن ، پیشنهاد میکنن که رندر توسط cpu ، (گاها) قابل اعتمادتر هست؟
مثلا در پلاگین particular در افترافکت ، در لینک زیر :


میگه :

کد:
Accelerating with the CPU can sometimes be more reliable, but accelerating with the GPU can speed things up quite a bit.

من نرم افزارهای 3 بعدی با موتور رندر gpu استفاده نکردم اما چندین بار دیدم که کسایی که در نرم افزارهای 3 بعدی (مثل سینما 4 دی و ...) از موتور رندری که توسط gpu استفاده میکنه ، استفاده کردن گلایه داشتن که نسبت به موتور رندر ای که از cpu استفاده میکنه ، کیفیت کارشون کمتر و بی کیفیت تر دراومد (حالا نمیدونم تنظیمات شون را بلد نبودن یا مثل همین پلاگین که خودش میگه گاها ، واقعا بین رندر با cpu و gpu ممکنه اندکی فرق باشه) .

به هر حال ، چرا این طور هست؟
چون قبلا گفته بودید که همه ی دستورالعمل های cpu را ، gpu هم داره . اصلا این قضیه (تفاوت قابل اعتماد بودن رندر)، به دستورات cpu و gpu برمیگرده و یا به اون برنامه یا چیز دیگه ای و چرا؟
تشکر استاد .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد (البته نیاز به بررسی های بیشتر دارم برای پست های بالاتون تا کامل تر درک کنم) .
استاد ، میگم چرا در بعضی از نرم افزار یا موتور رندر یا پلاگین هایی که هم توسط cpu و هم gpu رندر میکنن ، پیشنهاد میکنن که رندر توسط cpu ، (گاها) قابل اعتمادتر هست؟
موتور های رندر یکسانی نیستند که کیفیت شون یکسان باشه، بر اساس دستورات و امکانات سخت افزاری اون پردازنده و میزان حافظه RAM ای که در اختیار اون پردازنده است رندر متفاوتی میگیرند و در نتیجه کیفیت خروجی متفاوتی ایجاد میشه. برای همین GPU گرچه میتونه سرعت پردازش بالاتری داشته باشه اما کیفیت خروجی موتور رندری که به میزان حافظه GPU و دستور العمل های GPU محدوده الزاما بخوبی موتور رندری که با CPU و RAM کار می کنه نیست.
مثلا در پلاگین particular در افترافکت ، در لینک زیر :


میگه :

کد:
Accelerating with the CPU can sometimes be more reliable, but accelerating with the GPU can speed things up quite a bit.

من نرم افزارهای 3 بعدی با موتور رندر gpu استفاده نکردم اما چندین بار دیدم که کسایی که در نرم افزارهای 3 بعدی (مثل سینما 4 دی و ...) از موتور رندری که توسط gpu استفاده میکنه ، استفاده کردن گلایه داشتن که نسبت به موتور رندر ای که از cpu استفاده میکنه ، کیفیت کارشون کمتر و بی کیفیت تر دراومد (حالا نمیدونم تنظیمات شون را بلد نبودن یا مثل همین پلاگین که خودش میگه گاها ، واقعا بین رندر با cpu و gpu ممکنه اندکی فرق باشه) .
کد موتور رندر و البته محدودیت های سخت افزاری تعیین کننده است. GPU یک پردازنده همه منظوره نیست که بشه ازش توقع داشت در همه موارد بخوبی CPU عمل کنه، در کدهایی که با امکاناتش تطابق بیشتری داره میتونه سرعت پردازش بیشتری ایجاد کنه اما نه در هر کاربردی.
به هر حال ، چرا این طور هست؟
چون قبلا گفته بودید که همه ی دستورالعمل های cpu را ، gpu هم داره . اصلا این قضیه (تفاوت قابل اعتماد بودن رندر)، به دستورات cpu و gpu برمیگرده و یا به اون برنامه یا چیز دیگه ای و چرا؟
من کجا گفته بودم همه دستورالعمل های CPU رو GPU هم داره؟ نه تا به حال همچین چیزی گفتم و نه همچین چیزی صحت داره.
منظور از قابل اعتماد بودن رندر اینه که بدون نقص و با تمام جزئیات انجام بشه. رندر هایی که GPU در حال حاضر ارائه می کنه کامل و با تمامی جزئیات نیست. یعنی محدودیت های سخت افزاری GPU و امکانات CUDA/OpenCL و ... تا به حال این اجازه رو نداده که یک رندر بدون نقص و با تمامی جزئیاتی که در CPU قابل انجامه در GPU های فعلی هم انجام بشه. هم بخاطر قدرت پردازش موازی بالاتر GPU و هم بخاطر نادیده گرفتن جزئیاتی با حجم حافظه کمتر، سرعت پردازش بیشتری حاصل شده ولی کیفیت اش کمتره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
خیلی ممنون استاد

استاد ، میگم من توی این لپتاپ فامیلم ، بازی ace combat 7 را نصب و تست کردم .
با همین قضیه ی processor power manager در power option ، گزینه ی maximum processor state را روی گزینه های مختلفی تنظیم میکردم (در حالت power saver) که باعثِ تنظیمِ فرکانس های مختلف در پردازنده میشد (که در اون تاپیک گفته بودم) .

اما یه چیز جالب اینکه تقریبا فرکانس پردازنده تا 1.5 گیگاهرتز که تنظیم میشد ، بازی طبق روالش پیش میرفت (فرضا 45 فریم میداد) . حالا اگه بیشتر از اون تنظیم هم میشد (یعنی مثلا 2.67 گیگاهرتز هم که تنظیم میشد) ، هیچ فرقی توی فریم دهی و اینها نمیکرد و همون فرضا 45 فریم رو میداد .
کارت گرافیکش هم 950M DDR5 4GB بود .
هر چند پایین تر از 1.5 گیگاهرتز هم در بیشتر اوقات همون فرضا 45 فریم بود اما مخصوصا پایین تر از 1 گیگاهرتز ، اون هم فقط گاها فریم هاش کم میشد و لگ میزد .

این قضیه بخاطر اینه که پردازنده تا 1.5 گیگاهرتز ، کاملا فرصتِ این رو داره که اون 45 فریم ای که این کارت گرافیک میده را اطلاعاتِ گرافیکی اش را پردازش کنه و برای کارت گرافیک برای رندر بفرسته . درسته؟

اما اگه گرافیکی قویتر بود که مثلا 100 فریم میداد ، در اینجا ممکن بود (نه اینکه حتما) ، اون 1.5 گیگاهرتز فرکانسِ پردازنده ، کافی نباشه و باعث لگ زدن بشه . درسته؟

همونطور که گفته بودم ، وقتی روی باطری هست ، فرکانس پردازنده بصورت پیش فرض روی 800 مگاهرتز هست . هر وقت لازم شد که بیشتر بشه ، اتوماتیک فقط همون لحظه تا فرکانسِ مورد نظرش بیشتر میشه و باعث میشه بهترین کارایی در مقابل کمترین مصرف و کمترین میزان دما را داشته باشه .

ای کاش در حالتی که شارژر هم وصل هست ، خودش همچین مدیریتی داشت (حالا نمیدونم این کار ، کارِ ویندوز هست یا بایوس یا پردازنده) . یا حداقل گزینه ای توی ویندوز بود که همچین حالتی را انتخاب میکردیم .
اما وقتی توی power option ئه ویندوز وقتی اعلام کنیم maximum processor state ئه پردازنده ، فلان مقدار باشه ، فقط ثابت روی همون فرکانس گیر میکنه که باعثِ افزایش دما میشه و اگه نیاز به فرکانسِ بیشتر باشه ، بیشتر نمیشه که باعث کاهش کارایی در اون لحظه میشه .
علاوه بر این ، خیلی به سختی فرکانسش از اون مقداری که حداکثرش تعیین شد ، کمتر میشه که باعث افزایش دما میشه (نسبت به حالتی که روی باطری خودش اتوماتیک مدیریت میکنه منظورم هست) .
 

the_king

مدیرکل انجمن
سلام
خیلی ممنون استاد

استاد ، میگم من توی این لپتاپ فامیلم ، بازی ace combat 7 را نصب و تست کردم .
با همین قضیه ی processor power manager در power option ، گزینه ی maximum processor state را روی گزینه های مختلفی تنظیم میکردم (در حالت power saver) که باعثِ تنظیمِ فرکانس های مختلف در پردازنده میشد (که در اون تاپیک گفته بودم) .

اما یه چیز جالب اینکه تقریبا فرکانس پردازنده تا 1.5 گیگاهرتز که تنظیم میشد ، بازی طبق روالش پیش میرفت (فرضا 45 فریم میداد) . حالا اگه بیشتر از اون تنظیم هم میشد (یعنی مثلا 2.67 گیگاهرتز هم که تنظیم میشد) ، هیچ فرقی توی فریم دهی و اینها نمیکرد و همون فرضا 45 فریم رو میداد .
کارت گرافیکش هم 950M DDR5 4GB بود .
هر چند پایین تر از 1.5 گیگاهرتز هم در بیشتر اوقات همون فرضا 45 فریم بود اما مخصوصا پایین تر از 1 گیگاهرتز ، اون هم فقط گاها فریم هاش کم میشد و لگ میزد .

این قضیه بخاطر اینه که پردازنده تا 1.5 گیگاهرتز ، کاملا فرصتِ این رو داره که اون 45 فریم ای که این کارت گرافیک میده را اطلاعاتِ گرافیکی اش را پردازش کنه و برای کارت گرافیک برای رندر بفرسته . درسته؟
نه. کارت گرافیکی نیست که 45 فریم میده، کارت گرافیکی که مستقل واسه خودش بازی رو اجرا نمی کنه که از پردازنده جلو بزنه واسه خودش هی فریم بسازه، وقتی کارت گرافیکی با ماوس و صفحه کلید و سناریو بازی در ارتباط نیست اون 100 فریم رو بر اساس کدوم واکنش ها بسازه؟
پردازنده کامپیوتر ئه که بازی رو اجرا می کنه و فریم ها حاصل همکاری پردازنده و کارت گرافیکی ئه. کارت گرافیکی با پردازنده همگام میشه تا فریم به فریم ایجاد بشه و نمایش داده بشه، هر کدوم که سریعتر باشه معطل اون یکی که کندتر ئه میشه.
اما اگه گرافیکی قویتر بود که مثلا 100 فریم میداد ، در اینجا ممکن بود (نه اینکه حتما) ، اون 1.5 گیگاهرتز فرکانسِ پردازنده ، کافی نباشه و باعث لگ زدن بشه . درسته؟
کارت گرافیکی ممکنه اونقدر قدرت داشته باشه که 100 فریم در ثانیه رو رندر کنه اما خودش که سر خود فریم تولید نمی کنه و دلیلی هم نداره که پردازنده حتما تمایلی به این داشته باشه که بیشتر از 45 فریم در ثانیه رو از کارت گرافیکی بخواد، معمولا یک سقف برای نرخ فریم در نظر میگیره. در ضمن وقتی پردازنده اونقدر قدرت نداره که 100 فریم رو پردازش کنه پس همچین نرخی رو هم از کارت گرافیکی نخواهد خواست، چه کارت گرافیکی قدرتش رو داشته باشه و چه نداشته باشه. همچنین لگ زدن رو وقتی حس می کنید که نرخ فریم پایین باشه، 100 فریم در ثانیه و 60 فریم در ثانیه هر دو شون نرخ های بالا و روان ای هستند، 100 اگه 60 بشه هم همچنان اونقدر روان هست که لگ ایجاد نشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
نه. کارت گرافیکی نیست که 45 فریم میده، کارت گرافیکی که مستقل واسه خودش بازی رو اجرا نمی کنه که از پردازنده جلو بزنه واسه خودش هی فریم بسازه، وقتی کارت گرافیکی با ماوس و صفحه کلید و سناریو بازی در ارتباط نیست اون 100 فریم رو بر اساس کدوم واکنش ها بسازه؟
پردازنده کامپیوتر ئه که بازی رو اجرا می کنه و فریم ها حاصل همکاری پردازنده و کارت گرافیکی ئه. کارت گرافیکی با پردازنده همگام میشه تا فریم به فریم ایجاد بشه و نمایش داده بشه، هر کدوم که سریعتر باشه معطل اون یکی که کندتر ئه میشه.

کارت گرافیکی ممکنه اونقدر قدرت داشته باشه که 100 فریم در ثانیه رو رندر کنه اما خودش که سر خود فریم تولید نمی کنه و دلیلی هم نداره که پردازنده حتما تمایلی به این داشته باشه که بیشتر از 45 فریم در ثانیه رو از کارت گرافیکی بخواد، معمولا یک سقف برای نرخ فریم در نظر میگیره. در ضمن وقتی پردازنده اونقدر قدرت نداره که 100 فریم رو پردازش کنه پس همچین نرخی رو هم از کارت گرافیکی نخواهد خواست، چه کارت گرافیکی قدرتش رو داشته باشه و چه نداشته باشه. همچنین لگ زدن رو وقتی حس می کنید که نرخ فریم پایین باشه، 100 فریم در ثانیه و 60 فریم در ثانیه هر دو شون نرخ های بالا و روان ای هستند، 100 اگه 60 بشه هم همچنان اونقدر روان هست که لگ ایجاد نشه.

سلامی مجدد
خیلی ممنون استاد .
بله . اینها را میدونم.
منظورم چیز دیگه ای بود .

منظورم این بود که الان که پردازنده با اونکه در فرکانس پایین ، یعنی ۱.۵ گیگاهرتز کار میکنه و در این حالت هم اون قدر فرصت داره که اطلاعاتِ گرافیکیِ ۴۵ فریم در ثانیه را پردازش کنه و برای رسم ، روال کارت گرافیک را فراخونی کنه و کارت گرافیک هم در این حالت ، همیشه ۹۹ درصد کار میکنه (تا رسم کنه) و اصلا هم عملکردش از ۹۹ درصد پایین تر نمیاد ؛ حالا نیازی نیست وقتی که کارت گرافیک با تمام توانش داره کار میکنه و پردازنده هم فقط با فرکانس ۱.۵ گیگاهرتز پاسخگوی اون مقدار فریم هست ، بی خودی فرکانسش را بالاتر ببریم دیگه . که تاثیری در افزایش فریم ها در این بازی نداشت.
درسته؟

بالا بردنِ فرکانسِ پردازنده بیشتر از ۱.۵ گیگاهرتز در این بازی ، زمانی لازم هست که کارت گرافیکِ قویتری داشته باشیم تا در این تنظیمات بتونه بیشتر از ۴۵ فریم را نمایش بده .
درسته؟

نمیدونم تونستم منظورم را برسونم یا نه.
تشکر استاد .
 

the_king

مدیرکل انجمن
سلامی مجدد
خیلی ممنون استاد .
بله . اینها را میدونم.
منظورم چیز دیگه ای بود .

منظورم این بود که الان که پردازنده با اونکه در فرکانس پایین ، یعنی ۱.۵ گیگاهرتز کار میکنه و در این حالت هم اون قدر فرصت داره که اطلاعاتِ گرافیکیِ ۴۵ فریم در ثانیه را پردازش کنه و برای رسم ، روال کارت گرافیک را فراخونی کنه و کارت گرافیک هم در این حالت ، همیشه ۹۹ درصد کار میکنه (تا رسم کنه) و اصلا هم عملکردش از ۹۹ درصد پایین تر نمیاد ؛ حالا نیازی نیست وقتی که کارت گرافیک با تمام توانش داره کار میکنه و پردازنده هم فقط با فرکانس ۱.۵ گیگاهرتز پاسخگوی اون مقدار فریم هست ، بی خودی فرکانسش را بالاتر ببریم دیگه . که تاثیری در افزایش فریم ها در این بازی نداشت.
درسته؟
من همچین نظری ندارم.
بالا بردنِ فرکانسِ پردازنده بیشتر از ۱.۵ گیگاهرتز در این بازی ، زمانی لازم هست که کارت گرافیکِ قویتری داشته باشیم تا در این تنظیمات بتونه بیشتر از ۴۵ فریم را نمایش بده .
درسته؟
لازم بودن رو نمیدونم بر اساس چه معیاری میسنجید، اگر کارت گرافیکی توان پردازش 70 فریم در ثانیه رو داره باید پردازنده ای رو بکار ببریم که بتونه این 70 فریم رو بدست بیاره؟ که چی بشه؟ حالا 70 فریم بر ثانیه نشه کمتر بشه چه مشکلی پیش میاد؟ از منطق این لازم بودن و نبودنتون سر در نمیارم.
الزما هم قرار نیست با پردازنده قوی تر تعداد فریم ها در یک بازی افزایش پیدا کنه، ممکنه از یک سقف ای بیشتر نشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
خیلی ممنون استاد

استاد ، نمیدونم همچین سئوالی را قبلا پرسیدم یا نه . شاید اشاره ای قبلا کرده بودم (نمیدونم) .
الان مثلا سرعت یک رم ای که 4000mhz (در واقع 4ghz) سرعت داره را در نظر بگیرید . خوب فرکانس پردازنده ها هم که تقریبا همین حد هست (یعنی فرکانس پردازنده ای که 4ghz سرعت داره را با این رم در نظر بگیرید . مثلا پردازنده ی ryzen 3 3100 که سرعت توربو اش 3.9ghz هست) .

پس چطوره که سرعت رم ، خیلی کمتره و پردازنده برای خوندنِ اطلاعات یا نوشتن اطلاعات از رم ، منتظر میمونه؟
این جوری اگه بخوایم ببینیم که پردازنده انتظار خاصی نباید بکشه . چون از لحاظ سرعت ، تقریبا در یک حد هستن . البته سرعت رفت و برگشت داده در رم این قدر میشه که اگه اشتباه نکنم ، بصورت یک طرفه ، نصف میشه . (یعنی سرعت رم ای که 4000mhz هست ، بصورت یک طرفه ، 2000mhz میشه) . درسته؟
این قضیه اش چطوره؟

حالا در cpu ، کَش هست که حداقل این سرعت یک طرفه را که مثلا 2000mhz بشه را جبران کنه .
اما در کارت گرافیک ای که مثلا 6000mhz کلاک حافظه ی گرافیکی اش باشه و بصورت یک طرفه ، 3000mhz یعنی 3ghz میشه ، حالا فرض کنید که کلاک هسته در کارت گرافیک ، 2ghz هست . در اینجا پس در واقع 1ghz که کلاک حافظه سرعتش بیشتر هست و این بیشتر بودن ، چه تاثیری داره؟

کلا جریان این ناهماهنگی بین کلاک حافظه و کلاک پردازنده ها (چه در cpu یا gpu) را متوجه نمیشم . یه کم بیشتر توضیح میدین؟
مخصوصا اینکه کلاک حافظه ها که چندان دستِ کمی از کلاک هسته ها ندارن . پس چرا میگن پردازنده ، خیلی معطلِ سرعت پایین حافظه ها میشن؟

تشکر استاد .
 

the_king

مدیرکل انجمن
سلامی مجدد
خیلی ممنون استاد

استاد ، نمیدونم همچین سئوالی را قبلا پرسیدم یا نه . شاید اشاره ای قبلا کرده بودم (نمیدونم) .
الان مثلا سرعت یک رم ای که 4000mhz (در واقع 4ghz) سرعت داره را در نظر بگیرید . خوب فرکانس پردازنده ها هم که تقریبا همین حد هست (یعنی فرکانس پردازنده ای که 4ghz سرعت داره را با این رم در نظر بگیرید . مثلا پردازنده ی ryzen 3 3100 که سرعت توربو اش 3.9ghz هست) .
اون 4GHz و 3.9GHz چی هستند؟ فرکانس، نه سرعت. سرعت پردازنده و حافظه مفهومی مستقل از فرکانس اونها است. بین شون رابطه هست، اما مستقل هستند، صرفا از روی فرکانس سرعت مشخص نمیشه. فرضا دو پردازنده ای با معماری و مجموعه دستورات یکسان رو تصور کنید که فرکانس شون 1Hz باشه، یعنی در هر ثانیه یک سیکل و یکی هر دستور رو در یک سیکل اجرا می کنه و اون یکی در هر دو سیکل. دومی برای اجرای یک دستور دو سیکل لازم داره، یعنی یکی شون هر ثانیه یک دستور اجرا می کنه و اون یکی هر دو ثانیه یک دستور. فرکانس هر دوشون یکسانه اما سرعت اولی دو برابر دومی است. حالا ممکنه یک پردازنده سومی باشه با همون فرکانس 1Hz که در هر سیکل دو دستور رو همزمان اجرا کنه، یعنی با نرخ یک دستور در هر نیم ثانیه، این سومی سرعتش دو برابر پردازنده اولی است، چهار برابر پردازنده دومی است، با وجود اینکه فرکانس سه پردازنده یکسان ئه، 1Hz ئه. فرکانس شون سرعت شون رو مشخص نکرد.
حالا تصور کنید که یک حافظه RAM یک کانالی هست که فرکانس اش 1Hz ئه، یعنی هر ثانیه یک دستور فرضا خواندن رو می تونه دریافت کنه، این دستور رو دریافت می کنه اما آیا در سیکل بعدی میتونه دستور خواندن بعدی رو هم دریافت کنه؟ نه الزاما، معمولا چنین نیست. برای اجرای اون دستور و خوانده شدن داده زمان لازم داره، CAS latency هست، فرضا باید 8 سیکل صرف اجرای اون دستور بشه، تو فاصله این 8 سیکل حافظه RAM مشغول کار ئه، نمیتونه دستور دیگری رو اجرا کنه.
پس چطوره که سرعت رم ، خیلی کمتره و پردازنده برای خوندنِ اطلاعات یا نوشتن اطلاعات از رم ، منتظر میمونه؟
شما می توانید در هر ثانیه دلخواه با تلفن زنگ بزنید، یعنی با فرکانس 1Hz، اما اگر الان در این لحظه زنگ زدید نمی توانید ثانیه بعدی زنگ دیگری بزنید، باید حداقل 10 ثانیه، 20 ثانیه، 30 ثانیه صرف مکالمه بکنید، سرعت مکالمه شما نمیتونه یک تماس در ثانیه باشه، باید منتظر باشید تا مکالمه قبلی تموم بشه، در مورد حافظه RAM هم همینه، حافظه RAM میتونه در هر سیکل یک یا چند تا دستور دریافت کنه، اما اگر دستوری دریافت کرد، باید وقت بهش بدهید تا اجرایش کنه، برای اجرای اون دستور چند سیکل زمان لازم داره.
حالا در cpu ، کَش هست که حداقل این سرعت یک طرفه را که مثلا 2000mhz بشه را جبران کنه .
اما در کارت گرافیک ای که مثلا 6000mhz کلاک حافظه ی گرافیکی اش باشه و بصورت یک طرفه ، 3000mhz یعنی 3ghz میشه ، حالا فرض کنید که کلاک هسته در کارت گرافیک ، 2ghz هست . در اینجا پس در واقع 1ghz که کلاک حافظه سرعتش بیشتر هست و این بیشتر بودن ، چه تاثیری داره؟
نمیفهمم چی میگید، اما به هر حال بین فرکانس کاری و سرعت رابطه مستقیمی نیست.
کلا جریان این ناهماهنگی بین کلاک حافظه و کلاک پردازنده ها (چه در cpu یا gpu) را متوجه نمیشم . یه کم بیشتر توضیح میدین؟
دو سخت افزار مستقل هستند با معماری های متفاوت، قرار نیست فرکانس هاشون هماهنگ باشه. روی مادربورد و سخت افزار های نصب شده، تعداد زیادی میکرو چیپ هست با فرکانس های متفاوت، هر کدوم کار خودشون رو با نرخ پاسخگویی متفاوتی می کنند.
مخصوصا اینکه کلاک حافظه ها که چندان دستِ کمی از کلاک هسته ها ندارن . پس چرا میگن پردازنده ، خیلی معطلِ سرعت پایین حافظه ها میشن؟
به همون دلیل که فرکانس رو معادل سرعت می گیرید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اون 4GHz و 3.9GHz چی هستند؟ فرکانس، نه سرعت. سرعت پردازنده و حافظه مفهومی مستقل از فرکانس اونها است. بین شون رابطه هست، اما مستقل هستند، صرفا از روی فرکانس سرعت مشخص نمیشه. فرضا دو پردازنده ای با معماری و مجموعه دستورات یکسان رو تصور کنید که فرکانس شون 1Hz باشه، یعنی در هر ثانیه یک سیکل و یکی هر دستور رو در یک سیکل اجرا می کنه و اون یکی در هر دو سیکل. دومی برای اجرای یک دستور دو سیکل لازم داره، یعنی یکی شون هر ثانیه یک دستور اجرا می کنه و اون یکی هر دو ثانیه یک دستور. فرکانس هر دوشون یکسانه اما سرعت اولی دو برابر دومی است. حالا ممکنه یک پردازنده سومی باشه با همون فرکانس 1Hz که در هر سیکل دو دستور رو همزمان اجرا کنه، یعنی با نرخ یک دستور در هر نیم ثانیه، این سومی سرعتش دو برابر پردازنده اولی است، چهار برابر پردازنده دومی است، با وجود اینکه فرکانس سه پردازنده یکسان ئه، 1Hz ئه. فرکانس شون سرعت شون رو مشخص نکرد.

خیلی ممنون استاد .
منظورتون از اینکه فرکانس های برابر در پردازنده های متفاوت ، یکسان عمل نمیکنن ، همون عملکرد متفاوتِ ipc ئه cpu ها هست؟

حالا تصور کنید که یک حافظه RAM یک کانالی هست که فرکانس اش 1Hz ئه، یعنی هر ثانیه یک دستور فرضا خواندن رو می تونه دریافت کنه، این دستور رو دریافت می کنه اما آیا در سیکل بعدی میتونه دستور خواندن بعدی رو هم دریافت کنه؟ نه الزاما، معمولا چنین نیست. برای اجرای اون دستور و خوانده شدن داده زمان لازم داره، CAS latency هست، فرضا باید 8 سیکل صرف اجرای اون دستور بشه، تو فاصله این 8 سیکل حافظه RAM مشغول کار ئه، نمیتونه دستور دیگری رو اجرا کنه.

شما می توانید در هر ثانیه دلخواه با تلفن زنگ بزنید، یعنی با فرکانس 1Hz، اما اگر الان در این لحظه زنگ زدید نمی توانید ثانیه بعدی زنگ دیگری بزنید، باید حداقل 10 ثانیه، 20 ثانیه، 30 ثانیه صرف مکالمه بکنید، سرعت مکالمه شما نمیتونه یک تماس در ثانیه باشه، باید منتظر باشید تا مکالمه قبلی تموم بشه، در مورد حافظه RAM هم همینه، حافظه RAM میتونه در هر سیکل یک یا چند تا دستور دریافت کنه، اما اگر دستوری دریافت کرد، باید وقت بهش بدهید تا اجرایش کنه، برای اجرای اون دستور چند سیکل زمان لازم داره.

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

دو سخت افزار مستقل هستند با معماری های متفاوت، قرار نیست فرکانس هاشون هماهنگ باشه. روی مادربورد و سخت افزار های نصب شده، تعداد زیادی میکرو چیپ هست با فرکانس های متفاوت، هر کدوم کار خودشون رو با نرخ پاسخگویی متفاوتی می کنند.

به همون دلیل که فرکانس رو معادل سرعت می گیرید.

پس این طور که متوجه شدم ، یکی از موارد اصلی ای که کار را خراب میکنه ، همون cas latency هست . درسته؟
تشکر
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
منظورتون از اینکه فرکانس های برابر در پردازنده های متفاوت ، یکسان عمل نمیکنن ، همون عملکرد متفاوتِ ipc ئه cpu ها هست؟
مگه میشه فرکانس یکسان عمل نکنه؟ فرکانس یکسان عمل می کنه، چون فرکانس تعریف خودش رو داره و طبق تعریفش هم هست، هر جایی که میخواد باشه. اما سرعت هم تعریف خودش رو داره که ربطی به فرکانس نداره. "مثلا سرعت یک رم ای که 4000mhz (در واقع 4ghz) سرعت داره" یعنی چی؟ مثل اینه که من بگم وزن شما دو متر ئه، یا بگم قد شما خنک ئه. سرعت چطوری با فرکانس سنجیده شده؟ اشتباهه. معنی اش این نیست که وزن در جاهای مختلف یکسان عمل نمی کنه، وزن معنی مشخص خودش رو داره، اما وزن ربطی به متر نداره.
پس این طور که متوجه شدم ، یکی از موارد اصلی ای که کار را خراب میکنه ، همون cas latency هست . درسته؟
خراب که نمی کنه، هر کاری زمان لازم داره. خود پردازنده هم همینه، پردازنده برای اجرای دستورات زمان متفاوتی لازم داره، الزاما در یک سیکل تموم نمیشه، الزاما در سیکل بعدی آماده دستور جدید نیست.
 

جدیدترین ارسال ها

بالا