X
تبلیغات
وکیل جرایم سایبری

SIA: Swarm Intelligence Algorithms

کتاب: برنامه نویسی موازی با کودا

کتاب برنامه نویسی موازی با کودا

 

این کتاب در سال 1397 توسط آقایان علی اکبر اله دانه و پیام کیافر در 994 صفحه نگارش شده است و در انتشارات ناقوس به چاپ رسیده است. این کتاب شامل دوازده فصل و دو پیوست الف و ب می باشد. در هر فصل از این کتاب علاوه بر پرداختن به مفاهیم فصل مربوطه به منظور تفهیم مفاهیم هر فصل چندین مثال عملی نیز راجع به برنامه نویسی کوائی آن آورده شده است. در این کتاب برای برنامه نویسی برای محاسبات موازی با GPU از پلتفرم کودا سی و سی پلاس پلاس استفاده شده است.

استفاده از توان محاسباتی رایانه‌ها در تحقیقات علمی و فعالیت‌های دانشگاهی، مراکز تحقیقاتی و شرکت‌های تجاری، کاربرد روزافزونی پیدا نموده است؛ ازاین‌رو نیاز به پردازش سریع‌تر افزایش یافته و به یک نیاز اساسی تبدیل شده است. سرعت کامپیوترهای شخصی کنونی نسبت به اجداد خود به‌طور سرسام‌آوری افزایش یافته است اما علیرغم وجود این موضوع باز جوابگوی نیازهای مطرح‌شده نیست. ازجمله عرصه‌هایی که احتیاج به کامپیوترهایی با سرعت پردازش بسیار بالا دارند می‌توان به برنامه‌های شبیه‌سازی در تحقیقات هسته‌ای، نانو فناوری محاسباتی، برنامه‌های پیش‌بینی وضعیت هوا، برنامه‌های فیلم‌سازی کامپیوتری، برنامه‌های ساخت انیمیشن حرفه‌ای و بسیاری از زمینه‌های مختلف دیگر که همگی به‌سرعت پردازش بسیار زیاد نیاز دارند تا در یک زمان مناسب به نتیجه برسند اشاره کرد. یک راه‌حل برای این معضل، استفاده از سوپرکامپیوترها است. درست است که سرعت پردازش سوپرکامپیوترها بسیار بالاتر از کامپیوترهای شخصی است اما استفاده از آن‌ها در همه موارد مقرون‌به‌صرفه نیست؛ ضمن آن‌که این فناوری در انحصار بعضی از کشورهای توسعه‌یافته است و سایر کشورها از دسترسی به این تجهیزات استراتژیک محروم هستند. راه‌حل دیگر در دستیابی به سرعت پردازش بسیار بالا، استفاده از روش پردازش موازی است. به بیان ساده در این روش چند پردازنده (در اینجا منظور پردازنده‏های گرافیکی) معمولی با همکاری یکدیگر به اجرای یک برنامه می‌پردازند که طی این همکاری، برنامه با سرعت بالاتری اجرا می‌شود. به عبارت دیگر، پردازش یا محاسبه‏ی موازی، شکلی از پردازش است که در آن دستورالعمل‌های بسیاری در یک زمان و به صورت هم‌زمان انجام می‌شوند و بر اساس این اصل اجرا می‌شوند که مسائل بزرگ را اغلب می‌توان به مسائل کوچک‌تر تقسیم نمود که سپس باهم و به‌صورت موازی اجرا شوند. کودا در نوامبر 2006 توسط انویدیا معرفی گردید، کودا یک پلتفرم محاسبات موازی همه‌منظوره و مدل برنامه‌نویسی است که رابط‌های برنامه‌نویسی را در اختیار برنامه‌نویسان قرار می‌دهد و به طراحان نرم‌افزار اجازه می‌دهد تا از توانایی‌های جی‌پی‌یو (GPU سرواژه Graphics Processing Unit بوده و به معنای واحد پردازش گرافیکی است) در جهت محاسبات همه‌منظوره روی واحد پردازش گرافیکی استفاده کنند. پلتفرم کودا یک لایه نرم‌افزاری است که دسترسی مستقیم به مجموعه دستورالعمل‌های مجازی جی‌پی‌یو و عناصر محاسبات موازی را می‌دهد. این پلتفرم به گونه‌ای طراحی شده است که با زبان‌های برنامه‌نویسی سی، سی‏پلاس‌پلاس، فرترن و متلب کار می‌کند. این قابلیت دسترسی، کار را برای متخصصان برنامه‌نویسی موازی به منظور استفاده از منابع جی‌پی‌یو به همان شکلی که از دایرکت‌ایکس (DirectX) یا اپن‌جی‌ال (OpenGL) استفاده می‌کنند، هموار کرده است. با استفاده از این معماری می‌توان برنامه خود را به زبان سی یا سی‏پلاس‏پلاس نوشته و سپس بر روی پردازنده گرافیکی اجرا کرده و از سرعت آن لذت برد. همچنین مورد مهم دیگر وجود پلتفرمی است که بتواند بر روی دستگاه‌های مختلف اجرا شود، کودا با این شعار که می‌تواند برای شما سطح قابل قبولی از کارایی و مقیاس‌پذیری را در یک زمان به ارمغان آورد، وارد بازار برنامه‌نویسی شده است. درباره معماری کودا گفته می‌شود که کودا معماری‌ای است که به جای محدود کردن شما، توسط کارایی یک‌سری کتابخانه، اجازه می‌دهد که کار موردنظرتان را انجام دهید. در گذشته نوشتن نرم‌افزار برای جی‌پی‌یو به این معنی بود که برای جی‌پی‌یو باید برنامه نوشته می‌شد، در مقابل همان‌طور که عنوان شد، کودا به شما اجازه می‌دهد با زبان‌های معمول برنامه‌ای بنویسید که بر روی جی‌پی‌یو نیز اجرا شود. در ادامه عناوین هر فصل آورده شده است:

فصل اول: مبانی و مفاهیم اولیه در محاسبات موازی

فصل دوم: مدل برنامه نویسی مبتنی بر واحد پردازش گرافیکی

فصل سوم: معرفی کودا سی و کلیات مفاهیم آن

فصل چهارم: نصب و راه اندازی کودا در ویندوز

فصل پنجم: مروری بر مباحث زبان سی و شروع کدنویسی با کودا

فصل ششم: ساختار و اصول برنامه نویسی با کودا

فصل هفتم: مدیریت خطا و تولید اعداد تصادفی در کودا

فصل هشتم: مدیریت انواع حافظه در کودا

فصل نهم: عملیات اتمیک

فصل دهم: رخدادها و جریان ها

فصل یازدهم: کتابخانه های کودا و استفاده از کتابخانه Thrust

فصل دوازدهم: استفاده از کودا در مثال هایی عملی

پیوست الف: متعلقات کودا سی و سی پلاس پلاس

پیوست ب: نصب و راه اندازی کودا در لینوکس (اوبونتو)

 

 

 

منابع:

[1]. کتاب برنامه نویسی موازی با کودا، علی اکبر اله دانه، پیام کیافر، انتشارات ناقوس،1397.

 

کتاب: ژن خودخواه


در شکل 1جلد کتاب ژن خودخواه به نویسندگی ریچارد داکینز با سی امین سالگرد نگارش این کتاب نشان داده شده است. این کتاب ویرایش دوم بوده و در سال 2006 در انتشارات Oxford University Press به چاپ رسیده است.

شکل 1: جلد کتاب ژن خود خواه ریچارد داکینز

کتاب شامل سیزده فصل می باشد. در ادامه به توضیح مختصری راجع به هر فصل داده می شود.

فصل اول: ما از کجا آمده ایم؟ یکی از مباحث مهمی که در این فصل مطرح شده است تفاوت رفتار خودخواهانه و رفتار ایثارگرانه که بین حیوانات و جانوران متعددی رخ می دهد، پرداخته شده است. برای بقاء یک گروه یا گونه، دو نوع انتخاب به نام های "انتخاب گروه" و "انتخاب فردی" وجود دارد. در روش انتخاب گروه، جاندار برای حفظ گروه جان خود را به خطر می اندازند یا حتی جاندار جان خود را فدای گروه می کند. ولی در روش "انتخاب فردی"، جاندار به طور خودخواهانه عمل می کند. در واقع برای حفظ گروه ایثار و خودگذشتگی انجام نمی دهد و منتظر فدا شدن جانداران دیگر در گروه است. در پایان فصل نویسنده اشاراتی به واحد اصلی انتخاب دارد که این واحد نه منافع شخصی، نه گونه، نه گروه و نه حتی خود فرد می باشد. بلکه ژن واحد وراثت می باشد. 

فصل دوم:  همتاسازها: منظور از همتاساز یا تکثیرکننده نوعی ملکول می باشد که می تواند شبیه خود را بسازد. معادل این همتا ساز امروزه مولکول DNA نام دارد. که به مرور زمان این همتاسازها یک نسخه از روی خود تولید کرده و به مرور زیاد می شوند. کپی از یک کپی از نسخه اصلی برای تعداد تکرار بالا ممکن است همراه با خطا باشد که این خود باعث تولید ملکول های با رقم های متفوت می شود. طبیعتاً نسخه ها با تعداد یکسان بیشتر به دلیل تولید ملوکول های مشابه بیشتر شانس ماندگاری بیشتری دارند. همین رقم های مختلف از یک ملوکول باعث "روند تکاملی" در ملوکول ها شده است.

فصل سوم: مارپیچ های نامیرا: در این فصل به مفاهیم تقاطع، تبادل، وارونگی و تقلید پرداخته شده است. که منظور از وارونگی این است که اگر دو سر یک کروموزوم جدا شود بلافاصله خودشان بهم می چسبند و حالت اولیه را می گیرند. ممکن است سر کروموزوم به جای دیگری از کروموزوم متصل شود که این رویداد باعث می شود که قطعات هم ژنی در کنار همدیگر قرار بگیرند که همکاری بهتری با یکدیگر دارند.

فصل چهارم:  در این فصل به تعریف ماشین ژن به صورت زیر پرداخته است: دو شاخه اصلی از ماشین ژن گیاهان و حیوانات می باشد که هر کدام خود دارای زیر شاخه های متعددی می باشند. در این فصل به موضوعی بنام رفتار بیشتر از دید زیست شناسان پرداخته شده است که در حیوانات نسبت به گیاهان خیلی بیشتر می باشد. ژن ها رفتار ماشین بقاء شان را کنترل می کنند البته نه به طور مستقیم بلکه به صورت غیر مستقیم. نویسنده معتقد است یک راه برای اینکه ژن ها بتوانند مسئله پیش بینی را حل کنند ایجاد ظرفیت برای یادگیری است. یکی از راه های پیش بینی شبیه سازی می باشد که امروزه توسط کامپیوتر ها این مورد بیشتر انجام می پذیرد.

فصل پنجم: ثبات و ماشین خودخواه: بیشتر این فصل به مفهوم تهاجم پرداخته است. که در دید اشتباهی ماشین را فرد خودخواه در نظر می گیرد که در کل هر چه به نفع ژن هایش باشد انجام می دهد. در صورتی که به عقیده نویسنده اگر هر حیوان به طور یک ماشین خودخواه مستقل در نظر گرفته شود اگر افراد مورد نظر خویشان نزدیک باشد این موضوع با اشکال مواجه می شود. چون خویشاوندها بخش مهمی از ژن هایشان مشترک است. بنابراین هر ژن خودخواه وابستگی خود را بین بدن های مختلف تقسیم می کند.

فصل ششم: چیسنی ژن: ژن خودخواه فقط یک قطعه از ژن نمی باشد. بلکه همه نسخه های قطعه خاصی از DNA منتشر در سراسر جهان می باشد. در بخشی از این فصل به نحوه محاسبه جد مشترک که فاصله نسلس نامیده می شود، و نزدیک ترین جد مشترک پرداخته است.

فصل هفتم: تنظیم خانواده: در این فصل منظور از تنظیم خانواده دو مفهوم  بچه آوردن جدید و بچه بزرگ کردن می باشد. بدین معنا که به ترتیب به به دنیا آوردن فرد جدید و توجه به افراد موجود می پردازد.

فصل هشتم: نبرد نسل ها: در این فصل به این موضوع پرداخته می شود که آیا مادر به بچه هایش یک امکانات مساوی را در اختیار آنها قرار می دهد یا اینکه بین فرزندان جهت تخصیص منابع تمایز قائل می شود؟ منظور از امکانات در اینجا مثلاً غذا دادن یا میزان در خطر قرار دادن خود در مقابل شکارگر می باشد.

فصل نهم: جنگ میان دو جنس (نر و ماده): تنها چیز مشترک بین والد یک فرزند 50 درصد سهم ژنی است که در فرزند مشترک شان وجود دارد. با توجه به اینکه در طبیعت هر کدام از والدین فرزندان متعددی می توانند داشته باشند هر کدام از والدها علاقمند به سرمایه گذاری کمتر روی فرزند خود پس از تولد دارد. تا با این کار برای فرزندان دیگر خود در سرمایه گذاری شریک شوند.

فصل دهم: تو پشتم را می خارانی، من پشتت سوار می شوم: در این فصل به نظرات افراد مختلف در مورد پیش مرگی، فداکاری و ایثارگری در گروه های اجتماعی می پردازد.

فصل یازدهم: مم: همتاساز جدید: در این فصل به انسان و ژن انسان پرداخته شده است. و پاسخ به سوال اینکه آیا انسان نسبت به بقیه ماشین های بقاء تفاوتی دارد؟ بله می باشد. مفهومی که باعث جدائی انسان با دیگر جانداران می شود "فرهنگ" می باشد. واژه "فرهنگ"  همانند ژن که انتقال ژنی دارد، در آن انتقال فرهنگی صورت می گیرد. به طور خلاصه در انتقال فرهنگی (علاوه بر رنگ چشم و مو، پوست و .. در انتقال ژنی رخ می دهد) رفتار و نحوه معاشرت هم روی نسل ها منتقل می شود. 

فصل دوازدهم: آدم های خوب جلواند: اگر خوب از نظر داروین در نظر گرفته شود افرادی هستند که ایثار می کنند تا نسل باقی بماند. از دیدگاه دیگر واژه "خوب" یعنی آدم های خوی می توانند جلو بیافتند باشد.

فصل سیزدهم: گستره وسیع ژن: این فصل خلاصه ای از کتاب "رخنمون گسترش یافته" نویسنده است که به کشمکش بین ژن و بدن فرد می پردازد که کدام عامل عامل حیات به حساب می آید.

لازم به توضیح است که چهلمین سالگرد انتشار این کتاب با ویرایش سوم در سال 2016 بوده است. که  تصویر این کتاب در شکل 2 نشان داده شده است.

شکل2 : تصویر ویرایش سوم کتاب ژن خودخواه سال 2016

[1]. کتاب ژن خودخواه، ریچارد داکینز، Oxford University Press ،ویرایش دوم، 2006.

 

کتاب توسعه برنامه موازی GPU با استفاده از کودا