MAHDIAR
17th November 2009, 02:24 PM
معماری مجموعه دستورات پردازنده
پیش از اینکه معماری ریسک همهگیر شود، بسیاری از معماران کامپیوتر در پی پرکردن خلا منطقی بین برنامهنویس و دستورات کامپیوتر بودند و بهدنبال طراحی مجموعه دستوراتی از کامپیوتر بودند که مستقیما از ساختارهای زبانهای سطح بالا، مثل فراخوانی زیربرنامهها، کنترل حلقهها و آدرسدهیهای پیچیده پشتیبانی کند و دسترسی به ساختارهای داده و آرایهها را با یک دستور آسان کند.
طبیعت فشرده چنین مجموعه دستوراتی، کوچکتر شدن حجم برنامه و فراخوانیهای کمتر به حافظه اصلی، که در آن زمان (اوایل دهه ۶۰) منجر به صرفهجویی زیادی در مصرف حافظه کامپیوتر و دیسک میشد. همچنین میزان تولید برنامهها به زبان اسمبلی، در غیاب زبانهای سطح بالایی چون فورترن و یا الگول مفید بود.
اینکه تمامی طراحیها به میزان بهرهوری بیشتر با هزینه کمتر میاندیشیدند و همچنین تعریف ساختارهای زبانهای سطح بالاتر با دستورات کمتر، همیشه دغدغه معماران نبود.
بهعنوان مثال، نسخههای سطح پایین معماری پیچیده که از سختافزار کمتری استفاده میکردند، به موقعیتهایی میرسیدند که در آنها بازدهی سیستم هنگامی بالا میرفت که از دستورات پیچیده (فراخوانی زیربرنامه و…) استفاده نمیشد و از چند دستور سادهتر به جای آن استفاده میکردند.
این نتیجه حاصل شد که معماران کامپیوتر، گاهی اوقات دستورات اسمبلر را «بیش از حد طراحی» میکردند که باعث میشد آندستور در سختافزار قابل پیاده سازی نباشد.
عوارض جانبی این موضوع (که فراتر از استانداردها بود)، مثل مقداردهی به یک ثبات که اگر از طریق عادی این کار انجام میشد، اتلاف زمانی به فاصله چندین پالس ساعت رخ میداد.
حتی در طراحیهای با بازدهی بالا، این دستورات سطح بالا، با رمزگذاریهای پیچیده همراه هستند و رمزگشایی این دستورات برای ترانزیستورهای ارزانتر غیرقابل انجام است. این معماریها در بخش طراحی پردازنده، کار عظیمی را باید طی کنند که هر دستور سطح بالا، در مقابل چند دستور مشابه سادهتر، اما کندتر در جدول رمزگشاییها یا صف ریزدستورات بهصرفه خواهد بود یا خیر و در زمانی که فضایی که ترانزیستورها اشباع میکنند، فضای محدودی خواهد بود، در اینصورت حفظ بازدهی بهروشهای دیگر ممکن نخواهد بود و نتیجه کار، به سادهتر کردن دستورات خواهد انجامید و این اتفاق به تولید کامپیوترها با معماری دستورات سادهشده در میانههای دهه ۷۰ میلادی منجر شد.
پردازندههای سیسک و ریسک
پردازندههایی که برمبنای معماری سیسک درست شدهاند، را میتوان در میان سری VAX، PDP-11، خانواده موتورولا ۶۸۰۰۰ و همچنین اینتل x86 یافت.
البته در تکامل معماریهای پردازندهها، دیگر اختلاف میان سیسک و ریسک کمتر شده است. اولین پیادهسازی سطح بالای سیسک که در خانواده ۴۸۶ اینتل، AMD، سایرکس و آیبیام وجود داشت تمام دستورات این پردازندهها را با پیادهسازی زیرمجموعهای از این دستورات (به کمک معماری ریسک، اما بدون محدودیتهای ذخیره بازیابی آن) اجرا و بازدهی بالایی را ارائه میکرد.
پردازندههای جدیدتر x86 قادر به رمزگشایی دستورات پیچیدهتر به ریزعملیات داخلی هستند که بهطور سریال اجرا میشوند، با این وجود بازدهی بالایی دارند.
کامپیوترهایی با معماری بدون مجموعه دستورات
تفکر جدیدی که هماکنون برای معماری مجموعه دستورات وجود دارد، کامپیوترهایی با معماری صفر دستورالعمل (ZISC، با تلفظ زیسک) است. این تفکر که از شبکههای عصبی مصنوعی و پردازشهای بزرگ موازی نشات میگیرد، اوایل دهه نود و بر مبنای یک مدل شبکه عصبی که توسط پروفسور لیون کوپر شکل گرفت. در سال ۹۳ در آزمایشگاه نیمههادیهای آیبیام مورد بررسی قرار گرفت و نخستین چیپ این پردازنده به نام ZISC36 توسط گایپیلت تولید شد. نخستین نسل از این پردازندهها ۳۶ سلول داشت و هر کدام بهعنوان نرون عمل میکرد. هر کدام از این سلولها میتوانست ورودی برداری تا ۶۴ بایت را مقایسه کند که در حافظهاش قرار داشت: اگر بردار ورودی با برداری که در حافظهاش یکی بود، برابر بود، سلول سیگنال میداد. سیگنال خروجی یا بهمعنای شناسایی الگو۹ بود، یا نیافتن الگو.
نکته اصلی سرعت بخشیدن به چنین سیستمی، پردازش موازی در سیستمهای زیسک است که دیگر دردسر بارگزاریهای سریال و خطی را ندارد و همزمان همه موقعیتها را با هم چک میکند. گسترشپذیری این سیستمها نیز جالب توجه است، یک سیستم زیسک میتواند با افزودن چیپهای بیشتر ، بیشتر شود بدون آنکه با بزرگ شدن از بازدهی آن کاسته شود.
پردازندههای امروزی زیسک حدود ۷۸ نرون در هر چیپ دارند و میتوانند در هر ثانیه یک میلیون الگو را مورد مطابقت قرار دهند و در کمتر از ۵۰ مگاهرتز فعالیت کنند.
در سال ۲۰۰۷، نسخه تکامل یافته زیسک ۷۸ به نام CogniMem1K ارائه شد که تشخیص بردار ۲۵۶ بایتی را در ۱۰میکروثانیه انجام میدهد
پیش از اینکه معماری ریسک همهگیر شود، بسیاری از معماران کامپیوتر در پی پرکردن خلا منطقی بین برنامهنویس و دستورات کامپیوتر بودند و بهدنبال طراحی مجموعه دستوراتی از کامپیوتر بودند که مستقیما از ساختارهای زبانهای سطح بالا، مثل فراخوانی زیربرنامهها، کنترل حلقهها و آدرسدهیهای پیچیده پشتیبانی کند و دسترسی به ساختارهای داده و آرایهها را با یک دستور آسان کند.
طبیعت فشرده چنین مجموعه دستوراتی، کوچکتر شدن حجم برنامه و فراخوانیهای کمتر به حافظه اصلی، که در آن زمان (اوایل دهه ۶۰) منجر به صرفهجویی زیادی در مصرف حافظه کامپیوتر و دیسک میشد. همچنین میزان تولید برنامهها به زبان اسمبلی، در غیاب زبانهای سطح بالایی چون فورترن و یا الگول مفید بود.
اینکه تمامی طراحیها به میزان بهرهوری بیشتر با هزینه کمتر میاندیشیدند و همچنین تعریف ساختارهای زبانهای سطح بالاتر با دستورات کمتر، همیشه دغدغه معماران نبود.
بهعنوان مثال، نسخههای سطح پایین معماری پیچیده که از سختافزار کمتری استفاده میکردند، به موقعیتهایی میرسیدند که در آنها بازدهی سیستم هنگامی بالا میرفت که از دستورات پیچیده (فراخوانی زیربرنامه و…) استفاده نمیشد و از چند دستور سادهتر به جای آن استفاده میکردند.
این نتیجه حاصل شد که معماران کامپیوتر، گاهی اوقات دستورات اسمبلر را «بیش از حد طراحی» میکردند که باعث میشد آندستور در سختافزار قابل پیاده سازی نباشد.
عوارض جانبی این موضوع (که فراتر از استانداردها بود)، مثل مقداردهی به یک ثبات که اگر از طریق عادی این کار انجام میشد، اتلاف زمانی به فاصله چندین پالس ساعت رخ میداد.
حتی در طراحیهای با بازدهی بالا، این دستورات سطح بالا، با رمزگذاریهای پیچیده همراه هستند و رمزگشایی این دستورات برای ترانزیستورهای ارزانتر غیرقابل انجام است. این معماریها در بخش طراحی پردازنده، کار عظیمی را باید طی کنند که هر دستور سطح بالا، در مقابل چند دستور مشابه سادهتر، اما کندتر در جدول رمزگشاییها یا صف ریزدستورات بهصرفه خواهد بود یا خیر و در زمانی که فضایی که ترانزیستورها اشباع میکنند، فضای محدودی خواهد بود، در اینصورت حفظ بازدهی بهروشهای دیگر ممکن نخواهد بود و نتیجه کار، به سادهتر کردن دستورات خواهد انجامید و این اتفاق به تولید کامپیوترها با معماری دستورات سادهشده در میانههای دهه ۷۰ میلادی منجر شد.
پردازندههای سیسک و ریسک
پردازندههایی که برمبنای معماری سیسک درست شدهاند، را میتوان در میان سری VAX، PDP-11، خانواده موتورولا ۶۸۰۰۰ و همچنین اینتل x86 یافت.
البته در تکامل معماریهای پردازندهها، دیگر اختلاف میان سیسک و ریسک کمتر شده است. اولین پیادهسازی سطح بالای سیسک که در خانواده ۴۸۶ اینتل، AMD، سایرکس و آیبیام وجود داشت تمام دستورات این پردازندهها را با پیادهسازی زیرمجموعهای از این دستورات (به کمک معماری ریسک، اما بدون محدودیتهای ذخیره بازیابی آن) اجرا و بازدهی بالایی را ارائه میکرد.
پردازندههای جدیدتر x86 قادر به رمزگشایی دستورات پیچیدهتر به ریزعملیات داخلی هستند که بهطور سریال اجرا میشوند، با این وجود بازدهی بالایی دارند.
کامپیوترهایی با معماری بدون مجموعه دستورات
تفکر جدیدی که هماکنون برای معماری مجموعه دستورات وجود دارد، کامپیوترهایی با معماری صفر دستورالعمل (ZISC، با تلفظ زیسک) است. این تفکر که از شبکههای عصبی مصنوعی و پردازشهای بزرگ موازی نشات میگیرد، اوایل دهه نود و بر مبنای یک مدل شبکه عصبی که توسط پروفسور لیون کوپر شکل گرفت. در سال ۹۳ در آزمایشگاه نیمههادیهای آیبیام مورد بررسی قرار گرفت و نخستین چیپ این پردازنده به نام ZISC36 توسط گایپیلت تولید شد. نخستین نسل از این پردازندهها ۳۶ سلول داشت و هر کدام بهعنوان نرون عمل میکرد. هر کدام از این سلولها میتوانست ورودی برداری تا ۶۴ بایت را مقایسه کند که در حافظهاش قرار داشت: اگر بردار ورودی با برداری که در حافظهاش یکی بود، برابر بود، سلول سیگنال میداد. سیگنال خروجی یا بهمعنای شناسایی الگو۹ بود، یا نیافتن الگو.
نکته اصلی سرعت بخشیدن به چنین سیستمی، پردازش موازی در سیستمهای زیسک است که دیگر دردسر بارگزاریهای سریال و خطی را ندارد و همزمان همه موقعیتها را با هم چک میکند. گسترشپذیری این سیستمها نیز جالب توجه است، یک سیستم زیسک میتواند با افزودن چیپهای بیشتر ، بیشتر شود بدون آنکه با بزرگ شدن از بازدهی آن کاسته شود.
پردازندههای امروزی زیسک حدود ۷۸ نرون در هر چیپ دارند و میتوانند در هر ثانیه یک میلیون الگو را مورد مطابقت قرار دهند و در کمتر از ۵۰ مگاهرتز فعالیت کنند.
در سال ۲۰۰۷، نسخه تکامل یافته زیسک ۷۸ به نام CogniMem1K ارائه شد که تشخیص بردار ۲۵۶ بایتی را در ۱۰میکروثانیه انجام میدهد