موضوع مقاله: معماری راه‌اندازی حمل‌ونقل | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # معماری راه‌اندازی حمل‌ونقل | مقدمه: محاسبات به عنوان قسمت فرعی انتقال داده اتفاق می‌افتد: نوشتن داده‌ها در یک پورت راه‌اندازی یک واحد اجرایی، واحد اجرایی را برای شروع محاسبات تحریک می‌کند. | ## بخش 1: معماری راه‌اندازی حمل‌ونقل | با توجه به ساختار ماژولار، TTA یک الگوی پردازنده ایده‌آل برای پردازنده ASIP با مسیر داده دلخواه اما با انعطاف‌پذیری و بدون هزینه طراحیی که شتاب‌دهنده‌های سخت‌افزاری آن عملکرد ثابت دارند. معمولاً یک پردازشگر TTA دارای چندین گذرگاه حامل و چندین واحد عملکردی متصل به گذرگاه‌ها است که فرصت‌هایی را برای موازی‌سازی سطح دستورالعمل فراهم می‌کند. یک کلمهٔ دستورالعمل TTA از چندین اسلات (slot, شکاف) تشکیل شده است، یک اسلات در هر گذرگاه، و هر اسلات تعیین‌کننده انتقال داده‌ای است که در گذرگاه مربوطه انجام می‌شود. به عنوان مثال، نرم‌افزار می‌تواند داده‌ها را مستقیماً بین واحدهای عملکردی بدون استفاده از ثبات انتقال دهد. TTA، برخی از جزئیات ریزمعماری را که معمولاً از دید برنامه نویسان پنهان هستند، آشکار می‌کند. این امر منطق کنترل یک پردازنده را بسیار ساده می‌کند، زیرا بسیاری از تصمیماتی که معمولاً در زمان اجرا انجام می‌شوند در زمان کامپایل تصحیح می‌شوند. اما به این معنی نیز است که اگر یک تفاوت کوچک در معماری بین این دو وجود داشته باشد، یک باینری که برای یک پردازنده TTA کامپایل شده است، بدون کامپایل مجدد روی دیگری اجرا نخواهد شد. مشکل ناسازگاری باینری، علاوه بر پیچیدگی اجرای یک سوئیچ زمینه کامل، TTAها را برای سیستم‌های جاسازی شده مناسب تر از محاسبات با هدف عمومی می‌کند. از میان تمام معماری‌های کامپیوتری مجموعه‌ای یک دستورالعمل(OISC)، معماری TTA یکی از معدود معماری‌هایی است که پردازنده‌ها مبتنی بر آن ساخته شده‌اند، و تنها موردی است که پردازنده‌ها مبتنی بر آن به صورت تجاری به فروش می‌رسد. مدل برنامه‌نویسی سطح پایین در مقایسه با VLIW استاندارد، مزایای متعددی را ممکن می‌سازد. برای مثال، یک معماری TTA می‌تواند موازی‌سازی بیشتری را با فایل‌های رجیستر ساده‌تر از VLIW ارائه دهد. از آنجایی که برنامه‌نویس زمان‌بندی عملوند و انتقال داده‌ها را کنترل می‌کند، پیچیدگی (تعداد پورت‌های ورودی و خروجی) فایل رجیستر (RF) لازم نیست مطابق با بدترین حالت مشکل/تکمیل سناریو ی دستورالعمل‌های موازی متعدد، مقیاس بندی شود. در صورت دور زدن نرم‌افزار، برنامه‌نویس با انتقال مستقیم داده‌ها به پورت‌های عملوند واحد اجرایی بعدی، نوشتن فایل ثبات را دور می‌زند. هنگامی که این بهینه‌سازی به‌طور تهاجمی اعمال شود، حرکت اصلی که نتیجه را به فایل رجیستر منتقل می‌کند، می‌تواند به‌طور کامل حذف شود، بنابراین فشار پورت فایل ثبات کاهش می‌یابد و یک ثبات عمومی برای سایر متغیرهای موقت آزاد می‌شود. | ## بخش 2: معماری راه‌اندازی حمل‌ونقل | کاهش فشار رجیستر، علاوه بر ساده‌سازی پیچیدگی مورد نیاز سخت‌افزار RF، می‌تواند منجر به صرفه‌جویی قابل‌توجه در انرژی CPU شود که یک مزیت مهم و ویژه در سیستم‌های تعبیه‌شده موبایل است.V. عملکردهای طیف وسیعی دارند و از اضافه کردن ساده اعداد صحیح گرفته و تا محاسبات خاص برنامه پیچیده و دلخواه کاربردی اجرا می‌کند. در صورتی که یک واحد تابع به طور کامل به صورت خط لوله درآمده باشند، می‌توان عملیات جدیدی را که برای پایان دادن به چندین چرخه ساعت طول می‌کشد، در هر چرخه ساعت شروع کرد. از طرف دیگر، یک خط لوله می‌تواند به گونه ای باشد که همیشه درخواست‌های شروع عملیات جدید را در حالی که یک مورد قدیمی هنوز در حال اجرا است نپذیرد. دسترسی به حافظه داده(data) و ارتباط با خارج پردازنده با استفاده از واحدهای اجرایی ویژه انجام می‌شود. واحدهای اجرایی که عملیات دسترسی به حافظه را اجرا می‌کنند و به یک ماژول حافظه متصل می‌شوند، اغلب واحدهای بارگذاری/ذخیره نامیده می‌شوند. واحد کنترل واحد کنترل یک مورد خاص از واحدهای اجرایی است که اجرای برنامه‌ها را کنترل می‌کند. برای اینکه برنامه‌های اجرا شده بتوانند اجرا (پرش) را به یک موقعیت دلخواه در برنامه اجرا شده منتقل کنند، واحد کنترل عملیات جریان کنترل را فراهم می‌کند. یک واحد کنترل معمولاً دارای یک خط لوله دستورالعمل است که شامل مراحلی برای واکشی، رمزگشایی و اجرای دستورالعمل‌های برنامه است. ثبات فایل‌ها فایل‌های رجیستر حاوی ثبات‌های عمومی هستند که برای ذخیره متغیرها در برنامه‌ها استفاده می‌شوند. تعداد پورت‌های خواندن و نوشتن (یعنی توانایی خواندن و نوشتن چندین ثبات در یک چرخه ساعت) می‌تواند در هر فایل ثبات متفاوت باشد. گذرگاه‌ها و سوکت‌های حامل معماری اینترکانکت شامل گذرگاه‌های حامل است که با استفاده از سوکت‌ها به پورت‌های واحد اجرایی متصل می‌شوند. به دلیل هزینه اتصال، معمولاً تعداد اتصالات بین واحدها کاهش می‌یابد (واحدهای اجرایی و ثبات فایل‌ها). در صورتی که مسیری از هر پورت خروجی واحد به درگاه‌های ورودی هر واحد وجود داشته باشد و اگر به طور کامل متصل باشد، به آن TTA گفته می‌شود. | ## بخش 3: معماری راه‌اندازی حمل‌ونقل | سوکت‌ها ابزاری برای برنامه‌نویسی پردازنده‌های TTA فراهم می‌کنند که به آنها اجازه می‌دهد در هر لحظه انتخاب کنند کدام اتصالات گذرگاه به پورت سوکت فعال باشد؛ بنابراین، انتقال داده‌هایی که در یک چرخه ساعت انجام می‌شوند را می‌توان با تعریف اتصال سوکت/پورت منبع و مقصد برای فعال کردن هر گذرگاه برنامه‌ریزی کرد. هر انتقال داده را می‌توان توسط یک گارد شرطی کرد که به یک ثبات (اغلب یک ثبات شرطی یک بیتی) و به یک گذرگاه متصل است. در صورتی که مقدار رجیستر محافظت شده به اشتباه (صفر) ارزیابی شود، انتقال داده برنامه‌ریزی شده برای گذرگاهی که گارد به آن متصل است، له می‌شود، یعنی در مقصد نوشته نمی‌شود. زبان اسمبلی برای پردازنده‌های TTA معمولاً شامل دستورالعمل‌های جریان کنترلی مانند شاخه‌های بدون شرط (JUMP)، شاخه‌های شرطی نسبی (BNZ)، فراخوانی توابع (CALL)، بازگشت شرطی (RETNZ) و غیره است که برای سایر پردازنده‌ها شبیه دستورالعمل‌های زبان اسمبلی مربوطه هستند. مانند بقیه عمل‌ها در یک ماشین TTA، این دستورالعمل‌ها به عنوان دستورالعمل‌های «حرکت» به یک واحد اجرایی ویژه پیاده‌سازی می‌شوند. پیاده‌سازی‌های TTAای که فقط از انتقال داده‌های بدون شرط پشتیبانی می‌کنند، مانند مکزیم اینتگریتد MAXQ, معمولاً دارای یک واحد اجرایی ویژه هستند که ارتباط نزدیکی با شمارنده برنامه دارند که به انواع آدرس‌های مقصد پاسخ می‌دهد. هر یک از این آدرس‌ها، هنگامی که به عنوان مقصد یک "حرکت" استفاده می‌شود، تأثیر متفاوتی بر شمارنده برنامه دارد - هر دستور "شاخه نسبی < شرط > " آدرس مقصد متفاوتی برای هر شرط دارد. برنامه‌نویس باید دستورالعمل‌ها را طوری زمان‌بندی کند که نتیجه‌ی یک عملیات نه خیلی زودتر از آماده‌شدن آن خوانده شود و نه خیلی دیرتر. هیچ سازوکار سخت‌افزاری‌ای برای شناسایی این اشتباه و قفل کردن پردازنده در صورت خواندن زودهنگام نتیجه وجود ندارد. برای مثال فرض کنید معماری‌ای وجود دارد که عمل جمع (add) دارای تأخیر ۱ و عمل ضرب (mul) دارای تأخیر ۳ چرخه‌ی کلاک است. اما در مورد mul، باید دو دستورالعمل صبر کرد تا بتوان نتیجه را خواند؛ یعنی نتیجه در سومین دستورالعمل پس از تحریک آماده می‌شود. اگر برنامه‌نویس نتیجه را زودتر از موعد بخواند، در واقع ممکن است نتیجه‌ی عملیات قبلی در همان واحد تابعی را بخواند — یا اگر هیچ عملیاتی قبلاً در آن واحد انجام نشده باشد، مقدار خوانده‌شده نامشخص خواهد بود. | ## جمع‌بندی | ز طرف دیگر، نتیجه باید به موقع (نه خیلی دیر) خوانده شود تا قبل از این که عملیات بعدی نتیجه جدیدی را در همان درگاه خروجی (Output Port) بنویسد، نتیجه‌ی قبلی از بین نرود.