شما می توانید با ارسال ایمیل خود ، بصورت رایگان مشترک شده و از بروزسانی مطلع شوید.

ایمیل خود را وارد کنید:

۱- با پایان یافتن ماههای محرم و صفر، قالب وبلاگ را از عزا درآوردم و کلا با قالب آی تی بلاگز تعویضش کردم. اگر به مزاجم ساخت، همین را اصلاح کرده و استفاده خواهم کرد. ۲ – خدایا زودتر انتخابات را برسان! و بدون دردسر تمام کن. شاید این کشتی وقت نشناس، دست از سر [...]

۱٫ شنیده ایم که نظافت نیمی از ایمان است؛ می‌دانید چرا؟ ۲٫ در لیوان کثیف، شیرعسل هم که بریزی نمی شود خورد! نصف کار این است که تمیز شود، نیم دیگر ریختن شیر پاک است. ۳٫ آن پاکیزگی که نیمی از ایمان است، تنها ناظر به نظافت ظاهر نیست، که بیشتر طهارت باطن مورد نظر [...]

پسر شهید روشن درگوش رهبری چه گفت؟ (اشک من رو درآورد این نوشته) حاشیه دیدار رهبری با خانواده شهید ‌روشن چه کنیم که معصیت نکنیم نظر جالب یک بیننده صدای آمریکا سیدحسن در کنار نورعلی تابنده (قطب صوفیه)

یکی از خصلتهایی که یا انسان را از درون ذوب می کند یا سبب می شود با کوچکترین مساله‌ای به مردم حمله کنیم، زودرنجی است. انسان زودرنج، بیش از هر کس، خودش را اذیت می کند، زیاد در فکر انتقام است و تا جایی که بتواند از موضوعات ریز و درشت، برداشت سوء می کند [...]

یک راه حمله کردن به یک موضوع، بد دفاع کردن است. تقریبا هر جا که بحث حجاب مطرح می‌شود، در دفاع از آن مطرح می‌شود که حجاب محدودیت نیست. به نظر بنده این یک دروغ است! تصور کنید در گرمای تابستان با مقنعه و چادر بخواهید فعالیت کنید؛ اگر این محدودیت نیست پس چیست؟ محدودیت [...]

دیروز تبلیغ جالبی از حجاب در سایت الف دیدم، خواستم از آن استفاده‌ای کرده باشم و لااقل داخل اتاق کارم، این تبلیغ را بگذارم. کیفیت عکس اما پایین بود، لذا دست به کار شدم و تبلیغ مشابهی البته ساده تر آماده کردم:

نوشته‌های با برچسب ‘Multi Thread’

پردازنده‏های چند هسته‏ای بخش ۳ – Multicore processors part 3

۴ نظر

در بخش قبل یک روش نه چندان آسان معرفی شد که با استفاده از آن می‏توان از حداکثر توان پردازنده‏های چند هسته‏ای استفاده کرد. امروز قصد دارم کتابخانه‏ای را معرفی کنم که با استفاده از آن به سادگی می‏توان حلقه‏های for سنگین را با استفاده از چند هسته‏ی پردازنده سریعتر اجرا کرد. کتابخانه‏ی OpenMP یک کتابخانه‏ی C/C++ است که توسط میکروسافت و به منظور تسهیل برنامه‏نویسی برای پردازنده‏های چند هسته‏ای تهیه شده است. اگر ویژوال استودیوی ۲۰۰۸ را نصب کنید، نسخه‏ی ۲ این کتابخانه نیز به صورت خودکار نصب می‏شود. برای استفاده از این کتابخانه باید ابتدا در تنظیمات پروژه، گزینه‏ی OpenMP Support را به Yes تنظیم کنید (شکل زیر).
فعال سازی OpenMP
سپس فایل omp.h را به لیست فایلهای سرآیه اضافه کنید. برای شروع کار بهتر است مثال قبلی را این بار با این کتابخانه امتحان کنیم. با استفاده از دستور omp_set_num_threads می‏‏توان تعداد رویه‏های مستقل برای استفاده توسط این کتابخانه را تعیین کرد. مقدار پیش فرض به تعداد هسته‏های پردازنده است. یکی از پرکاربردترین عبارات(هر چی فکر کردم معادل directive یادم نیومد!) این کتابخانه عبارت parallel هست که می‏توانید قبل از حلقه‏ی for به صورت زیر از آن استفاده کنید.

به همین سادگی؛ حالا اگر برنامه را اجرا کنید، حلقه‏ی for به طور خودکار در ۴ رویه‏ی مستقل اجرا خواهد شد. با استفاده از این دو خط برنامه شما می‏توانید به راحتی تعداد رویه‏هایی که باید در اجرای حلقه کمک کنند را تعیین کنید. مثال جلسات قبل را با استفاده از این کتابخانه اجرا کردم، زمان اجرا برای حالتی که از دو ریسمان استفاده شد ۵٫۵ ثانیه و برای ۴ ریسمان ۲٫۸۵ ثانیه شد که تقریبا مشابه حالتی است که خودمان ۲ یا ۴ ریسمان را تولید کنیم. حتما استفاده از این کتابخانه راحت تر است! برای یادگیری بیشتر این کتابخانه و امکانات جالب آن به MSDN (راهنمای ویژوال استودیو) مراجعه فرمایید.

In the previous paper, I introduced an approach based on threads to use the maximum power of multicore processors in our programs. Here I introduce a handy library from Microsoft which makes programming for multicore CPUs an amazing work. OpenMP is an efficient library with several directives and functions which helps us to write or migrate codes for multi core CPUs simply by adding some line of codes. If you are using visual studio .net 2005 or 2008, this library is already installed and you can use it. To demonstrate this library we consider the example of the previous paper. To add support of OpenMp in our project, we must open “Project Settings” and change the value “OpenMP Support” to “Yes”. This makes visual studio to load required libraries for OpenMP.
Enable OpenMP support in MSVC
Then we should add header file omp.h at the beggining of our cpp file. Using “omp_set_num_threads” we are able to set the number of threads which should be used by OpenMp library. The default value is equal to the number of CPU cores. One of the most important directive in this library is the “parallel” directive which can be used before heavy “for” loops to tell that the following loop must be shared between several cores of the processor. You can use it as follows:

How to use Open MP

Thats all! you have not to create separated threads and manage them, all of the works will be done by OpenMP. Using this code with omp_set_num_threads(2) the program takes about 5.5 seconds on Q6600 processor and with omp_set_num_threads(4) about 2.85 seconds. These values are almost the same as in the previous paper which we created threads mannualy. But I think OpenMP is easier!. For more information on OpenMP see MSDN (Visual Studio Help)


پردازنده‌های چند هسته‌ای بخش ۲ – Multi Core Processors Part 2

بدون نظر

در این مقاله یک روش آسان برای استفاده‏ی بهینه از پردازنده‏های چندهسته‏ای در برنامه‏های پردازشی ارائه می‏کنیم. کد زیر را در نظر بگیرید:
یک حلقه‌ی ساده

این کد یک حلقه‏ی ساده است که در اکثر برنامه‏های پردازشی یافت می‏شود. با اجرای این کد ملاحظه می‏کنیم که تنها از توان یک هسته‏ی پردازنده استفاده شده و سه پردازنده‏ی دیگر بیکار می‏مانند. در این حالت اجرای برنامه ۱۰٫۶۰ ثانیه زمان می‏برد. برای استفاده از چند هسته باید برنامه را به صورت زیر تغییر دهیم:
دو رویه‌ی مستقل برای سریعتر کردن اجرای حلقه

وضعیت پردازنده در حین اجرای برنامه با استفاده از دو رویه‌ی مستقل
با این تغییر نصف حلقه‏ی four در یک رویه و نیمه‏ی دیگر آن در رویه‏ی دیگر اجرا می‏شود. با توجه به اینکه عملیات این دو رویه کاملا از هم مستقل است، سیستم عامل، هر کدام از حلقه‏ها را به صورت خودکار به یکی از هسته‏های پردازنده می‏سپارد. به این ترتیب از توان دو هسته به خوبی استفاده می‏کنیم! و زمان اجرای برنامه به حدود نصف، ۵٫۴۸ ثانیه، کاهش می‏یابد. به همین ترتیب اگر به جای دو رویه از چهار رویه استفاده کنیم، زمان اجرای برنامه به ۲٫۸۳ ثانیه می‏رسد که ۴ بار کمتر از زمان اجرای اولیه است!

کد این برنامه را از اینجا دریافت کنید.
نکته‏ای که باید توجه داشته باشیم این است که انجام این کار همیشه ساده نیست ، چرا که خیلی اوقات عملیات داخل حلقه به نتایج قبلی پردازش شده در حلقه وابسته است. البته از این هم که بگذریم مدیریت منابع بین رویه‏ها هم ،همیشه کار آسانی نیست. در همین مثال هم برای سادگی متغیرها را سراسری تعریف کرده‏ام. در قسمت بعدی راه ساده‏تری برای استفاده از چند هسته را بیان خواهیم کرد.
—————————————————————————————————————————————————————————–

In this paper, a simple approach to efficient use of several cores of the processor is escribed. Consider the following code:


This is a simple “for” loop which is frequently used in processing applications.
After running this code, we will see that only one core of the CPU is involved and other three cores were not affected. In this case the execution time is 10.60 seconds. To use the power of two cores we should change the program as follows:



Here we used two threads where each of them is responsible for the half part of the loop. Since these two threads are completely independent, OS sends each of them to specific core of the processor. In this way we used the power of two processors and the execution time is reduced from 10.6 to 5.48 sec. This procedure can be repeated with 4 threads and as expected the execution time will be reduced to 2.83 sec.

Download VC Code
It is important to know that this process is not always so simple. we should share resources carefully within all threads, on the other hand some times the body of “for” loop is not independent from one index to another. In the next part I will introduce a simpler way to use several cores of the processor.