حافظه
اصلی در محاسبات موازي یا بهصورت حافظهاشتراکی است یا حافظه توزیع شده.
معماری حافظه توزیع شده یا Distributed گاهی بهصورت فیزیکی و گاهي
بهصورت منطقی است که در بهترین حالت پردازندههای سیستم در محاسبات موازي باید از حافظههای فیزیکی که بهصورت محلی است، استفاده کنند.
همانطور
كه ميدانيد، محاسبات همزمان و موازی بهچند صورت انجام ميپذیرد: در حد
بیت، خط دستور، اطلاعات و اجرای تکالیف همزمان که هر کدام از این انواع
در چیدمان و معماری سیستمهای همزمان تأثیرگذار هستند.
زمانی که پردازندههاي کامپیوترها تکهستهای بود، همزمانی اجرای دستورات نرمافزار با استفاده از Multi
Threading انجام ميشد که اگر چه واقعاً Cuncurrency يا همزمانی مطلق تحقق
پیدا نمیکرد، اما با استفاده از نرمافزار امکان اجرای دستورات موازی با
استفاده از رشتهپردازشي (Thread) امکانپذير بود. بهعنوان مثال، در دات
نت یا جاوا ميتوان نرمافزارهایی را طراحی کرد که چند عمل را بهصورت
موازی و همزمان انجام دهند.
از طرفی هر چه که پیش ميرویم، هستههای پردازنده کامپیوترها بیشتر و بیشتر ميشود. در داتنت 4 که بهتازگی از طرف شرکت مایکروسافت به بازار عرضه شده، قابلیت استفاده از چند پردازنده بیشتر از نسخههای قبلی تقویت شده است.
استفاده
از کلاسهایی که در دات نت4 برای اجرای همزمان دستورات وجود دارد، از
نسخههای قبلی بسیار آسانتر است تا آنجا که حتی دیگر به استفاده از
رشتهپردازشي و Thread Pool نیز بهصورت مستقیم نیازی وجود ندارد ( با
استفاده از System.Threading.Tasks
در VS2010 ميتوان از این قابلیتها استفاده کرد)، یکی از کامپوننتهای
داتنت که ميتوان تأثیر همزمانی را در آن بیشتر احساس کرد، LINQ است که از
نسخه 3 دات نت پا به عرصه وجود گذاشت و تحول عظیمی در سیستمهای
نرمافزاری که با پایگاه داده کار ميکنند، ایجاد کرد.
LINQ
با قابلیت پرسوجو یا Query در منابع اطلاعاتی بهصورت جستوجو در
Collection های (ListT) عمل ميکند و PLINQ که Parallel LINQ است، اجرای
الگوی همزمانی در این جستوجوها است که در داتنت 4 به بازار معرفی شد. در
PLINQ هدف استفاده کامل از تمامی پردازشگرها و تمام ظرفیت آنها است.
PLINQ
این کار را با تکهتکه کردن منبع اطلاعاتی به تکههای Segment و اجرای
جستوجو برای هر Segment در یك رشته بهصورت موازی در چند پردازنده انجام
ميدهد. که این کار به افزايش سرعت اجرای Queryها کمک ميکند.
شاید
تا اینجا فکر کنید که همزمانی در اجرای پرسوجوها همیشه سرعت سیستم را
بالا ميبرد. اما همیشه اینطور نیست و ملاحظاتی وجود دارد که باید در
طراحی و اجرای دستورات PLINQ به آن توجه کرد. باید توجه داشت که سرعت
بالاتر در PLINQ با استفاده از روشهاي خاصی بهوجود ميآید.
بهعنوان
مثال، اگر اجرای دستوری دو میلی ثانیه زمان بخواهد، اگر به صورت سریال
اجرا شود برای اجرای صد دستور دويست میلیثانیه زمان نياز خواهيم داشت. اما
اگر از یک سیستم با چهار هسته استفاده شود سیستم باید درپنجاه میلیثانیه
این عملیات را انجام دهد که باعث خواهد شد 150 میلیثانیه صرفهجويی زمانی بهوجود آید.
حال
محاسبه کنید اگر یک عملیات یکثانیه طول بکشد، چه میزان صرفهجويی در
زمان انجام عملیات بهوجود ميآید. در عملیاتی که سرعت، اهمیت بالایی در آن
دارد و زمان اجرای آنطولانی است، استفاده از PLINQ کارايی بیشتری به سیستم ميدهد.
عواملی
را که در افزایش سرعت در جستوجوهای PLINQ تأثيرگذار است، ميتوان به چند
دسته تقسيم کرد: نخست آنکه باید قبل از استفاده از دستورات PLINQ به
هزینهای که پرسوجوها دارند، دقت کرد (مطابق مثال بالا). نکته دیگر
دقتکردن بهتعداد هستههایی است که سیستم دارد. تعداد هستههای پردازنده و
اختصاص دادن هر عملیات به هسته خاص تأثیر فراوانی در کار خواهد داشت.
عامل
دیگر توجه به این موضوع است که در پرسوجو به چه ترتیبی از منابع استفاده
ميشود و چه ایندکسهایی در پایگاه داده قرار داده شده است. همچنین
باید بهتعداد و نوع عملیاتی که PLINQ انجام ميدهد، دقت و نوع جمعآوری
اطلاعات از آرایهها و فهرستهایی که از جستوجوی هر کدام از منابع
اطلاعاتی به دست ميآيد، توجه كرد. نكته آخر اين كه نحوه تقسیمبندی یا
Partitioning اطلاعات در سگمنتها برای سرعت در جستوجو از اهمیت بالایی برخوردار است.