موضوع مقاله: پردازنده برداری | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # پردازنده برداری | مقدمه: یک پَردازنده بُرداری، یا آرایه‌پرداز، رایانهٔ خاصی است با چند پردازنده برای پردازش موازی تعداد زیادی از آرایه‌ها.توضیح واژه آرایه‌پرداز در واژه‌های مصوب فرهنگستان زبان فارسی. | ## بخش 1: پردازنده برداری | آرایه‌پرداز در واقع یک واحد پردازش مرکزی (CPU) می‌باشد که یک مجموعه دستورالعمل‌هایی را اجرا می‌کند که روی آرایه تک بعدی از داده، که همان بردار است، عمل می‌کند. این درست مقابل پردازنده‌های عددی قرار می‌گیرد که دستورالعمل‌های آن صرفاً روی یک تکه داده عمل می‌کند. پردازنده‌های برداری در دهه ۱۹۷۰ مورد بحث واقع شدند و پایه و اساس اکثر ابررایانه‌های دهه ۱۹۸۰ تا ۱۹۹۰ را تشکیل دادند. پیشرفتهای پردازنده‌های عددی، مخصوصاً ریزپردازنده‌ها، باعث کاهش به کار گیری پردازنه‌های برداری سنتی در ابررایانه‌ها و همچنین کاهش استفاده از تکنیک‌های پردازش برداری در پردازنده‌ها در اوایل دهه ۱۹۹۰ شد. امروزه اکثر پردازنده‌ها از یک معماری استفاده می‌کنند که در آن دستورالعمل‌هایی برای پردازش برداری روی چندین تکه داده، را به‌طور برجسته نشان می‌دهد. نمونه‌هایی از استفاده از تکنیک پردازش برداری را می‌توان در کنسول‌های بازی و شتاب دهنده گرافیکی نیز پیدا کرد. در سال ۲۰۰۰، IBM، توشیبا و سونی با همکاری هم موفق به تولید یک پردازنده سلولی (نوعی ریزپردازنده) شدند، این پردازنه سلولی شامل یک پردازنده عددی و هشت پردازنده برداری بود که در پلی استیشن ۳ مورد استفاده قرار گرفت. در برخی از طراحی‌های پردازنده‌ها، دستورالعمل‌های چندگانه روی چندین تکه داده عمل می‌کنند که آن‌ها را به عنوان MIMD (چند دستوره، چند داده) می‌شناسیم. اینگونه طراحی‌ها مختص کاربردهای ویژه هستند و به‌طور عادی برای استفاده‌های متداول کاربرد ندارند. تاریخچه پردازش برداری اولین بار در اوایل دهه ۱۹۶۰ توسط وستینگهاوس، در پروژه Solomon مورد توجه قرار گرفت و توسعه یافت. هدف این پروژه افزایش چشمگیر سرعت محاسبات ریاضی، با استفاده همزمان از تعداد زیادی عملیات ساده ریاضی، زیر نظر یک پردازنده بود. به این صورت که پردازنده در هر کلاک یک سیگنال مشترکی را برای تمامی واحدهای محاسبه و منطق (ALUها) می‌فرستاد. در حالی که هر یک از این واحدهای محاسبه ورودی‌های مجزایی داشتند، یک کار مشترک روی آن ورودی‌ها انجام می‌دادند. | ## بخش 2: پردازنده برداری | این روش به ماشین‌های Solomon این قابلیت را می‌داد که یک الگوریتم را روی انبوهی از داده‌ها (که از آرایه‌ها تغذیه می‌شدند) اجرا نماید. در سال ۱۹۶۲، وستینگهاوس پروژه را لغو کرد ولی دوباره در دانشگاه ایلینوی تحت عنوان ILLIAC IV از سر گرفته شد. در طراحی ابتدایی آن، این ماشین به ۲۵۶ واحد محاسبه و منطق مجهز بود، درحالی که وقتی در سال ۱۹۷۲ عرضه شد تنها ۶۴ واحد محاسبه و منطق داشت و فقط می‌توانست ۱۰۰ تا ۱۵۰ میلیون فلاپس کار کند. برای کار با اطلاعات فشرده و حجیم، مانند دینامیک محاسباتی سیالات، همین ماشین معیوب (به دلیل اینکه نتوانستند تعداد ۲۵۶ واحد محاسبه و منطق ایجاد کنند) سریعترین ماشین دنیا بود. تکنیک پردازش برداری تقریباً در تمام طراحی‌های پردازنده‌های مدرن وجود دارند، اگرچه معمولاً با نام SIMD می‌شناسند. در اینگونه پردازنده‌ها، واحد پردازش برداری در کنار واحد پردازنده عددی کار می‌کند و برنامه‌هایی با آن بخش کار می‌کنند که واقعاً می‌دانند که این واحد حضور دارد. جزئیات بیشتر پردازنده‌ها دستورالعملی دارند که بیان می‌کند «A را با B جمع کن و درون C بریز». مقادیر A, B و C (حداقل در تئوری) به ندرت می‌تواند داخل دستورالعمل باشند (چه به صورت صریح، چه رجیستر). در واقع داده به ندرت به‌طور خام فرستاده می‌شود، بلکه به صورت اشاره‌ای به آدرس حافظه که داده داخل آن است، می‌باشد. با افزایش سرعت پردازنده‌ها، این تأخیر حافظه تبدیل به مانعی بزرگ برای عملکرد سریع پردازنده محسوب می‌شود. اولین بخش، آدرس را خوانده و کدگشایی می‌کند، بخش بعد مقادیر آدرسها را از حافظه می‌گیرد و بعدی کار محاسبه و اجرا را انجام می‌دهد. در تکنیک خط لوله، رمز کار در این است که شروع کدگشایی دستورالعمل بعدی، باید حتی قبل از خروج دستورالعمل قبلی از پردازنده صورت گیرد؛ در نتیجه واحد کدگشایی آدرس همواره مشغول به کار می‌باشد. زمانی که آن را تأخیر می‌نامیم؛ ولی پردازنده با خط لوله می‌تواند دسته‌ای از دستورالعملها را خیلی سریعتر انجام دهد. | ## بخش 3: پردازنده برداری | پردازنده برداری پردازنده برداری یک قدم فراتر برمی‌دارد و به‌جای ایجاد خط لوله برای دستورالعمل‌ها، داده‌ها را نیز خط لوله می‌کند. دستورالعملهایی هستند که به‌جای اینکه بگویند «A را با B جمع کن»، می‌گوید «تمامی اعداد از اینجا تا آنجا را با تمامی اعداد از اینجا تا آنجا جمع کن». و به‌جای اینکه دستورالعمل‌ها را پشت سر هم رمزگشایی و داده‌های مربوط به آن‌ها را از حافظه دریافت کند، یک دستورالعمل را از حافظه می‌خواند و با فرض اینکه می‌داند که آدرس بعدی یکی بیشتر از آدرس فعلی است، دستورالعمل بعدی را رمزگشایی می‌کند. برای نشان دادن اینکه چه تفاوتی می‌کند، فرض کنید می‌خواهیم دو آرایه ۱۰ تایی از اعداد را با هم جمع کنیم. همچنین کد مورد استفاده در پردازش برداری کوتاه‌تر است که این خود سبب کاهش حافظه مورد نیاز برای دستورالعمل‌های آن می‌باشد. بررسی وابستگی بین این اعداد لازم نیست چون دستورالعمل برداری، چندین عمل غیر وابسته را معین می‌کند. کد زیر را در نظر بگیرید که در آن می‌خواهیم دو گروه عدد را با هم جمع کنیم و سپس با گروه سوم ضرب کنیم. جنبه منفی باید توجه داشت که تمام مسائل را نمی‌توان با استفاده از این روش بهبود داد. پیاده‌سازی این دستورالعمل‌ها در پردازنده خود پیچیدگی زیادی را بر هسته پردازنده تحمیل می‌کند. همچنین دستورالعمل‌های پیچیده سبب کندی قسمت رمزگشایی و پیچیدگی بیشتر آن خواهد شد، که این خود باعث کندی اجرای دستورهای عادی می‌شود. جنبه مثبت و کاربرد در حقیقت، پردازش برداری برای انجام عملیات روی انبوهی از داده‌ها بهترین کارایی را دارند. این ابر رایانه‌ها عموماً برای پیش‌بینی وضعیت هوا و آزمایشگاه‌های فیزیک استفاده می‌شوند که انبوهی از داده را به چالش می‌گیرد. | ## جمع‌بندی | مثال دنیای واقعی: دستورالعملهای برداری در معماری x86 کد زیر مثال حقیقی معماری x86 با دستورالعمل‌های برداری می‌باشد.