سخت افزار رایانه: تفاوت پردازنده ۳۲ و ۶۴ بیتی

مقدمه

امروزه دنیای سخت افزار کامپیوتر پیشرفت و گسترش زیادی پیدا کرده و روزی نیست که محصول جدیدی در این وادی معرفی نشود. یکی از مهمترین و پیشروترین عناصر در دنیای دیجیتال، CPU یا همان پردازنده مرکزی است.
پردازنده‌های رایانه آنقدر پیچیدگی و ظرافت دارند که کمتر شرکتی قادر است در این وادی گام نهد و سالهاست که تنها دو شرکت غول پیکر اینتل و AMD در این زمینه فعالیت دارند. شرکتهای دیگری که در زمینه طراحی و ساخت پردازنده مشغول هستند، عمدتا بر کاربردهای خاص تکیه دارند.
در دنیای پردازنده‌ها پیشرفتهای عمده ای صورت گرفته است و به تبع آن، اصطلاحات جدیدی هم روانه فرهنگ واژگان شده و می شود. خیلی از ما این واژه‌ها را استفاده می کنیم بدون اینکه آنها را خوب بشناسیم. حتی گاهی از تلفظ صحیح آنها آگاه نیستیم. حتما اصطلاحاتی مثل FSB، Core 2، Core 2 Duo، LGA 775، ۴۵ nm، ۸ MB L2 Cache و DDR3 را شنیده اید و ممکن است در هنگام خرید کامپیوتر به اعداد و ارقام مقابل این اصطلاحات توجه کنید. اما آیا از خود پرسیده‌اید که وقتی می گویند CPUی Q6600 با تکنولوژی nm 60 ساخته شده است یعنی چه؟ کجای CPU به ۶۰ نانومتر کار دارد؟ یا مثلا پردازنده‌ی ۶۴ بیتی ۴ هسته‌ای، چه تفاوتی با پردازنده‌ی ۳۲ بیتی ۲ هسته‌ای دارد؟
دنیای الکترونیک بسیار پویاست و هر روز فن آوری جدیدی در آن رخ می‌نماید، و از ما به عنوان یک شهروند در عصر آی تی، انتظار می‌رود که با این فن آوریهای نوین آشنا شده و اصطلاحات آنها را به خوبی بشناسیم تا در برابر پرسش پرسشگران، پاسخی در خور داشته باشیم.
در سلسله مقالات پیش رو، برخی از مهمترین اصطلاحات رایج در مورد پردازنده‌ها را معرفی کرده و تاثیر آنها روی کارآیی پردازنده را ارزیابی کنیم.

معماری ۳۲بیتی و ۶۴ بیتی

اگر دانشجوی رشته برق یا کامپیوتر باشید و درس اصول میکرو یا معماری کامپیوتر را گذرانده باشید، احتمالا معنی این اصطلاحات را می‌دانید. شاید در اولین نگاه فکر کنید یک معماری ۶۴ بیتی ۲ برابر سریعتر از معماری ۳۲ بیتی باشد، لیکن این یک تفکر کاملا اشتباه است.

معماری۳۲ بیتی و ۶۴ بیتی دو تفاوت عمده دارند:

در معماری ۳۲ بیتی، CPU قادر است در هر بار خواندن اطلاعات، تعداد ۳۲ بیت یا چهار بایت داده را بخواند. به عبارتی گذرگاه داده (Data Bus) 32 بیتی است. در معماری ۶۴ بیتی، گذرگاه داده ۶۴ بیتی است و امکان خواندن ۸ بایت داده در لحظه وجود دارد. با این توضیح باید معماری ۶۴ بیتی دو برابر سریعتر از ۳۲ بیتی باشد. اما نکته این است که بسیاری از انواع داده ای مورد استفاده (مثل byte, int, char, WORD, DWORD) اندازه‌ای کمتر از ۸ بایت (۶۴ بیت) دارند و در چنین مواردی کیفیت CPUی ۶۴ بیتی و ۳۲ بیتی، تفاوتی نداشته که هیچ، ممکن است معماری ۳۲ بیتی بهتر جواب دهد. لیکن اگر داده‌های اعشاری مثل double که ۶۴ بیت طول دارند استفاده کنیم، مسلما کیفیت CPUی ۶۴ بیتی بهتر خواهد بود.
دومین تفاوت بین این دو معماری در طول و تعداد ثباتهای پردازنده است. ثباتها، سریعترین خانه‌های حافظه‌ی در دسترس پردازنده هستند که دسترسی به آنها با سرعت نامی پردازنده، مثلا ۳ گیگاهرتز، انجام می‌شود (سایر عناصر حافظه که عمدتا همان RAM است، با سرعتی معادل حداقل سرعت تراشه RAM و سرعت گذرگاه روی مادربرد قابل دسترسی اند). در معماری ۳۲ بیتی به طور معمول ۸ ثبات ۳۲ بیتی وجود دارد لیکن در معماری ۶۴ بیتی تعداد ثباتها به ۱۶ ثبات ۶۴ بیتی افزایش یافته است. از این نظر مسلما کیفیت پردازنده ی ۶۴ بیتی بهتر خواهد بود.

در کل پردازنده ی ۶۴ بیتی از ۳۲ بیتی بهتر است ولی نه آنقدر که ۳۲ بیتی از ۱۶ بیتی بهتر بود! به عبارتی اگر پردازنده ۳۲ بیتی تقریبا ۱۰۰% افزایش کارایی نسبت به ۱۶ بیتی داشت، پردازنده ۶۴ بیتی شاید در حدود ۲۵% بهبود کارایی داشته باشد. سعی کردم که اطلاعات مستندی ارائه کنم لیکن مقایسه مناسبی در سطح وب نیافتم که رجاع دهم، چرا که عمدتا مقایسه سیستم عامل ۶۴ بیتی و ۳۲ بیتی انجام شده و پردازنده در هر دو حال ۶۴ بیتی بوده است. اما همین مقایسه هم می تواند تا اندازه ای روشنگر باشد (این مقایسات حدود ۱۰% بهبود را نشان می دهند):

http://www.extremetech.com/article2/0,2845,2280812,00.asp

http://64-bit-computers.com/windows-vista-32-bit-vs-64-bit-benchmark.html

Share

پردازنده‌های چند هسته‌ای بخش ۲ – Multi Core Processors Part 2

در این مقاله یک روش آسان برای استفاده‏ی بهینه از پردازنده‏های چندهسته‏ای در برنامه‏های پردازشی ارائه می‏کنیم. کد زیر را در نظر بگیرید:
یک حلقه‌ی ساده

این کد یک حلقه‏ی ساده است که در اکثر برنامه‏های پردازشی یافت می‏شود. با اجرای این کد ملاحظه می‏کنیم که تنها از توان یک هسته‏ی پردازنده استفاده شده و سه پردازنده‏ی دیگر بیکار می‏مانند. در این حالت اجرای برنامه ۱۰.۶۰ ثانیه زمان می‏برد. برای استفاده از چند هسته باید برنامه را به صورت زیر تغییر دهیم:
دو رویه‌ی مستقل برای سریعتر کردن اجرای حلقه

وضعیت پردازنده در حین اجرای برنامه با استفاده از دو رویه‌ی مستقل
با این تغییر نصف حلقه‏ی four در یک رویه و نیمه‏ی دیگر آن در رویه‏ی دیگر اجرا می‏شود. با توجه به اینکه عملیات این دو رویه کاملا از هم مستقل است، سیستم عامل، هر کدام از حلقه‏ها را به صورت خودکار به یکی از هسته‏های پردازنده می‏سپارد. به این ترتیب از توان دو هسته به خوبی استفاده می‏کنیم! و زمان اجرای برنامه به حدود نصف، ۵.۴۸ ثانیه، کاهش می‏یابد. به همین ترتیب اگر به جای دو رویه از چهار رویه استفاده کنیم، زمان اجرای برنامه به ۲.۸۳ ثانیه می‏رسد که ۴ بار کمتر از زمان اجرای اولیه است!

کد این برنامه را از اینجا دریافت کنید.
نکته‏ای که باید توجه داشته باشیم این است که انجام این کار همیشه ساده نیست ، چرا که خیلی اوقات عملیات داخل حلقه به نتایج قبلی پردازش شده در حلقه وابسته است. البته از این هم که بگذریم مدیریت منابع بین رویه‏ها هم ،همیشه کار آسانی نیست. در همین مثال هم برای سادگی متغیرها را سراسری تعریف کرده‏ام. در قسمت بعدی راه ساده‏تری برای استفاده از چند هسته را بیان خواهیم کرد.
—————————————————————————————————————————————————————————–

In this paper, a simple approach to efficient use of several cores of the processor is escribed. Consider the following code:


This is a simple “for” loop which is frequently used in processing applications.
After running this code, we will see that only one core of the CPU is involved and other three cores were not affected. In this case the execution time is 10.60 seconds. To use the power of two cores we should change the program as follows:



Here we used two threads where each of them is responsible for the half part of the loop. Since these two threads are completely independent, OS sends each of them to specific core of the processor. In this way we used the power of two processors and the execution time is reduced from 10.6 to 5.48 sec. This procedure can be repeated with 4 threads and as expected the execution time will be reduced to 2.83 sec.

Download VC Code
It is important to know that this process is not always so simple. we should share resources carefully within all threads, on the other hand some times the body of “for” loop is not independent from one index to another. In the next part I will introduce a simpler way to use several cores of the processor.

Share

پردازنده‌های چند هسته‌ای بخش ۱ – Multi Core Processors Part 1

همان طور که در پست “وقتی تکنولو‍ژی کم می‌آورد” گفتم در این سالهای اخیر پردازنده‌های چند هسته‌ای رشد چشم گیری داشته‌اند. امروز قصد داریم ببینیم این افزایش تعداد هسته‌ها چه فایده‌ای دارد؟ شاید خیلی از شما بعد از خرید یک پردازنده‌ی ۲ هسته‌ای مثل E8400 یا پردازنده‌ی ۴ هسته‌ای مثل Q6600 چندان احساس افزایش کارایی در سیستم خود نکرده باشید! برای مثال قبلا نرم‌افزاری مثل مدیا استودیو در عرض بیست دقیقه فیلم شما را تولید می‌کرد و الان هم همین اتفاق می‌افتد. تفاوت در چیست؟ از این پس فرض می‌کنیم شما یک پردازنده‌ی چهارهسته‌ای دارید.

اگر نگاهی به Task Manager بیندازید ملاحظه می‌کنید که به جای تک گراف سبز رنگی که قبلا می‌دیدید، الان ۴ گراف کوچک وجود دارد که هر کدام نماینده‌ی یک cpu است. حال اگر درحین اجرای یک برنامه‌ی سنگین این گرافها را ببینید ملاحظه می‌کنید که تنها یکی از این گرافها در حالت بیشینه‌(۱۰۰%) است و سه گراف دیگر روی ۰% قرار دارند. گراف کلی مصرف پردازنده هم تنها ۲۵% مصرف را نشان می‌دهد. این وضعیت بیانگر این است که آن برنامه‌ی سنگین، تنها می‌تواند از توان یک پردازنده استفاده کند. متاسفانه این وضعیت برای اکثر نرم‌افزارهای موجود وجود دارد و از این رو شما هیچ سودی از تعویض پردازنده‌تان نکرده‌اید! از ویندوز هم که انتظار نمی‌رود قدرت توزیع پردازشهای یک برنامه روی چند پردازنده را داشته باشد.
نگران نباشید برای اینکه به پردازنده‌ی خود افتخار کنید!، اینبار چند برنامه‌ی سنگین را اجرا کنید؛ ملاحظه می‌کنید که هر کدام از این برنامه‌ها از یک پردازنده استفاده کرده و کارایی کاملی از خود به نمایش می‌گذارند، مثلا اگر چهار برنامه، در حال کار سنگین باشند؛ هر چهار پردازنده‌ مشغول شده و مصرف کلی به ۱۰۰% می‌رسد. در چنین زمانی پردازنده‌ی شما مثل چهار پردازنده‌ی تک هسته‌ای عمل می‌کند. خوش به حالتون!
خوب شاید شما به عنوان یک برنامه نویس بخواهید برنامه‌ای بنویسید که از هر چهار هسته استفاده کند؛ چنین کاری البته شود و لیک به خون جگر شود!
در پست بعدی یک روش تقریبا آسان برای استفاده از حداکثر کارایی پردازنده‌های چندهسته‌ای بیان خواهیم کرد.

——————————————————————————————————————–

Nowadays multi core processors are well developed and distributed through the world. Here we are going to find whether these CPUs are beneficial or not. You may don’t experience a better performance when installing new Quad Core CPU like Q6600 or Dual Core one like E8400. Here I will describe the reasons. From now on I assume that you have a Quad Core CPU.

Take a look on the performance graph of the Task Manager; you will see 4 small graphs instead of traditional single graph. Each graph represents one core of your CPU. Now run a heavy program and trace the graphs, you will see that only one graph is in maximum load and the others are not affected at all; the global CPU usage is about 25%. This is because your program can not use the power of 4 processing cores and also windows can not distribute the work load on all CPUs. So in this case no improvements happened and this multi core CPU is not different from single core CPUs!
Now run 4 heavy applications and again trace the graphs, oh all graphs were reached to the maximum value and the overall CPU usage was reached to 100%. This is a really improvement, you are using the power of four CPUs!
Is it possible that an application uses the power of all processors? Of course, and I will describe it in next posts.

Share