معماری جریان داده

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

معماری گردش داده(Dataflow Architecture) یک روش معماری کامپیوتر است که در معماری های پردازش موازی به کار می رود و کاملاً با روش کلاسیک فون نیومن یا کنترل گردش (Control Flow) در تضاد است.در معماری گردش داده، شمارنده برنامه (Program Counter) وجود ندارد، یا توانایی اجرا (Executibility) و اجرای دستورات تنها بر اساس موجود بودن آرگومان های ورودی تشخیص داده می شود. اگرچه هیچ محصول تجاری موفقی در زمینه سخت افزار های با اهداف کلی (General Purpose) از این روش استفاده نمی‌کند، ولی اخیراً پیاده سازی های موفقی از آن در سیستم های تخصصی مثل پردازش سیگنال های دیجیتال، مسیریابی شبکه ها، پردازش گرافیکی و جدیدترین آن در انبارداری داده (Data Warehousing) استفاده می شود.همچنین این روش در بسیاری از معماری های نرم‌افزاری هم استفاده می شود مثل طراحی موتورهای پایگاه داده ای و چهارچوب های پردازش موازی.

معماری های گردش داده همزمان (Synchronous Data Flow Architecture) وفق یافته اند تا بار کاری تحمیل شده توسط یک مسیرداده ای همزمان مثلاً سرعت یک سیم در پیش فرستادن بسته ها را میزان کند. معماری گردش داده ای به صورت طبیعی برنامه ریزان را قادر می سازد تا بتوانند کارهای پیچیده ای از جمله بالانس کردن بارپردازشی را به صورت همزمان انجام دهند، همچنین در این روش در دسترسی به منابع مشترک هم بسیار موثر عمل می کند.

معماری سخت افزاری برای گردش داده ها یک از مهمترین مساثل در معماری کامپیوترها در دهه هفتاد میلادی و اوایل دهه هشتاد میلادی بود.جک دنیس (Jack Dennis) از دانشگاه MIT در زمینه معماری گردش داده ایستاد پیشرو بود و این درست در زمانی بود که همزمان پروژهای معماری Manchester Dataflow Machine و MIT Tagged Token در زمینه ماشین های با معماری گردش داده پویا را نیز درحال اجرا بودند.

طراحی هایی که از روش های معمول آدرس دهی حافظه به عنوان استقلال داده ای استفاده می کنند (Data Dependency) را ماشین های گردش داده ای ایستا می گویند. این ماشین ها اجازه نمی‌دهند تا چند نمونه (instance) از یک رویه(routine) به صورت همزمان ساخته و اجرا شود.دلیل این امر این است که بچسب ساده(simple tag) نمی‌تواند میان آنان تفاوت قائل شود.طراحی هایی که از Content Addressable Memory(CAM) استفاده می کنند را ماشین های با گردش داده پویا می گویند. این برنامه ها از برچسب هایی استفاده می کنند که پردازش موازی را تسهیل می کند.

به صورت عادی کامپایلر ها(compilers) متن اصلی برنامه(source code)را آنالیز می کنند تا وابستگی های داده ای میان دستورات را برای ساماندهی بهتر ترتیب دستورات در فایل باینری خروجی بیابد. دستورات به صورت ترتیبی ساماندهی شده اند ولی اطلاعات مربوط به وابستگی در فایل های باینری ذخیره نمی‌شوند. فایل های باینری که برای ماشین های گردش داده ای ذخیره می شوند، حاوی این اطلاعات وابستگی هستند. کامپایلر برای نگه داری این اطلاعات به جای استفاده از متغیرها از از بچسب های یکتایی استفاده می کند. با استفاده از این روش برچسب گذاری به قطعه کد غیر مستقل اجازه داده می شود که در پردازش موازی بدون ترتیب (out of order) اجرا شود.

برنامه ها در CAM کامپیوتر جریان داده پویا ذخیره می شوند. هنگامی که همه عملونده های یک دستورالعمل فعال می شوند(یعنی خروجی یک دستورالعمل قبلی ویا یک ورودی از کاربر)، دستور به عنوان دستور آماده علامت گذاری می شود. این عمل توسط یک بخش اجرایی(execution unit) انجام می شود. به این عمل فعالسازی(activation) یا شعله ور کردن(firing)دستورالعمل می گویند. به محض این که عملیات بخش اجرایی بر روی یک دستور خاتمه می یابد، خروجی آن در CAM ذخیره می شود(به همراه برچسب آن). هر دستوری که به که به داده خاصی وابسته باشد(این امر با بررسی مقدار برچسب شناسایی می شود) و سپس به عنوان آماده برای اجرا برچسب می خورد. در این حالت دستورات بعدی با ترتیب درست اجرا می شوندو از حالت مسابقه ای پرهیز می شود(race condition). این ترتیب اجرا احتمالاً با ترتیب مورد انتظار نوشته شده توسط انسان متفاوت خواهد بود.

یک دستورالعمل به همراه عملوندهای مورد نیاز آن، به شکل یک بسته به بخش اجرایی فرستاده می شود، که به آن instruction token گفته می شود. به صورت مشابه، داده خروجی به عوان token به CAM بازگردانده می شود. این بسته سازی دستورات و نتایج اجازه می دهد تادستورات در پردازش موازی بتوانند در ابعاد بزرگ اجرا شوند. شبکه های جریان داده وظیفه رساندن دستورات به شکل token را به بخش اجرایی و برعکس به CAM را بر عهده دارند. کاملاً برعکس معماری فون نیومن، token ها به شکل پایدار در حافظه ذخیره نمی‌شوند، بلکه آن ها پیام های موقتی هستند که در زمان تبادل دستورات ذخیره می شوند.
تحقیقات هنوز نتوانسته اند به مسائل مربوط به موارد زیر هیچگاه فائق بیایند:

  • کارایی پخش کردن Data Token ها در سیستم های موازی بسیار حجیم.
  • کارایی مخابره instruction tokenها در سیستم های موازی حجیم.
  • درست کردن CAM هایی با بزرگی مناسب برای نگهداری همه وابستگی ها در سیستم های حقیقی.

با این وجود، از دهه ۱۹۹۰ اجرای خارج از روال(out-of-order execution) تبدیل به یک مشکل اساسی در پارادایم محاسباتی شده است که یک روش گردش داده ای محدود می باشد. در این پارادایم، یک ایده به نام پنجره اجرایی(execution window)معرفی شده است. این پنجره های اجرایی از همان ترتیب معماری فون نیومن پیروی می کنند، با این حال داده ها در داخل این پنجره ها اجازه دارند تا با توجه به وابستگی ها اجرا و خاتمه یابند. این روش در CPUهایی که به روش پویا به برچسب گذاری می پردازند پیاده سازی شده است. پیچیدگی منطقی پیگیری اثر داده های وابسته به شکل پویا OoO CPUرا به تعدادی بخش های اجرایی محدود می کند و اندازه سایز پنجره ها را به رنج ۳۲تا ۲۰۰ دستور کوچک می کند.این مقدرا بسیار کوچکتر از مقدر آن در سیستم های تمام گردش داده ای است.«ویکی‌پدیا انگلیسی»، صفحهٔ ۴۶</ref>

منابع[ویرایش]

مشارکت‌کنندگان ویکی‌پدیا، «Dataflow_architecture»، ویکی‌پدیای en.wikipedia، دانشنامهٔ آزاد (بازیابی در ۲۰۱۱).