انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: sasan-pink در 21 خرداد 1389، 01:01 قظ
-
با عرض سلام خدمت دوستان :
من یک تحقیقاتی انجام دادم و در مورد برنامه نویسی مالتی تریدینگ تو لینوکس به یک نتایجی رسیدم کتابخانه pthread و ...
اما میخواستم بدونم روش هایی هست که بشه برنامه هایی نوشت که thread ها رو روی هسته های مختلف اجرا کرد و بطور کلی در روند اجرای برنامه توسط کرنل لینوکس دخالت کرد و یا حتی پروسس های مختلفی که در مجموع با هم همکاری داشته باشند و بشه تعیین کرد که هر کدومشون روی هسته جداگانه ای اجرا بشن. این کار رو توی یکی دو تا برنامه هایی که قبلا توی ویندوز باهاشون کار میکردم و برای تبدیل فایل های مالتی مدیا بود دیده بودم و میتونستی انتخاب کنی که از یک هسته یا دو تا یا تمامی هسته ها استفاده بشه.
ممنون میشم دوستان اگه تجربه ای یا مطلبی در این مورد سراغ دارن اینجا بگن البته با نظر خاصی به پردازنده های اینتل
-
وقتی شما یک نرمافزار رو ماتلی ترد بنویسی اونوقت باید بتونی مشخص کنی که ترد رو کدوم هسته سیپییو اجرا بشه. به مشخص کردن این Processor affinity میگن.
من خودم به صورت عملی اینکار رو نکردم ولی این مطلب تو ویکیپدیا باید بتونه کمکت کنه.
On Linux the CPU affinity of a process might be altered with the taskset(1) program. [2] On SGI systems, dplace
binds a process to a set of CPUs.
http://en.wikipedia.org/wiki/Processor_affinity
http://en.wikipedia.org/wiki/Affinity_mask
-
من قبلا از MPICH2 استفاده می کردم. از موازی سازی تحت کرنل قوی تر هست. سرعتش هم بیشتر هست. به صورت دستی هم می تونی بگی از چند تا ترد استفاده کنه. یه آینده نگری هم توی این کار هست که اگر بعدا خواستی برنامت رو روی یه کلاستر اجرا کنی کمتر به مشکل بر می خوری.