MAHDIAR
2nd May 2010, 03:21 PM
از کارت گرافيک کار بكشيد!! جعبه ابزاري قدرتمند براي MATLAB
شرکت*هاي توليدکننده سخت*افزار در سراسر جهان بسيار زياد هستند و هر شرکتي پشتيباني خاصي از سخت*افزار توليدي خود مي*کند. اين شرکت*ها با در اختيار کاربر قرار دادن نرم*افزارهاي مختلفي، مي*کوشند تا کاربر از تمام قدرت سخت*افزار بهره بگيرد. از جمله سخت*افزارهايي که قدرت پردازش بسيار بالايي دارند و اغلب در سيستم*ها بيکار هستند، کارت*هاي گرافيک*اند. در سال*هاي اخير براي بر دوش کشيدن نسل*هاي جديد بازي*ها، کارت*هاي گرافيک بسيار پيشرفت کردند.
به موازات زماني که Athlon X2 4800 (پردازنده 2هسته*اي) توليد شد، GeForce 8500 (کارت*گرافيک 16هسته*اي) در بازار بود و سه سال بعد همراه با Core i7 (پردازنده 4هسته*اي)، کارت گرافيک GeForce GTX 285 (کارت گرافيک 240هسته*اي) نيز در بازار بود.
امروزه اين پتانسيل بالا در کارت*هاي گرافيکي باعث شده که توليدکنندگان با عرضه ميان*افزارهايي، اين محصولات را به عرصه*هاي ديگر نيز وارد کنند. از جمله اين ميان*افزارها CUDA Driver است که مخصوص کارت*هاي گرافيک انويديا است و کارت گرافيک را تبديل به پردازنده*اي همه*منظوره مي*کند. پس از نصب اين ميان*افزار، مي*توانيد از مجموعه نرم*افزارهايي که روي کارت گرافيک اجرا مي*شوند، بهره ببريد. براي نمونه نرم*افزارهايي طراحي شده*اند که عمليات كدگذاري1 و كدبرداري2 ويدئو را روي کارت*هاي گرافيک انجام مي*دهند که باعث صرفه*جويي در وقت و هزينه مي*شود و يا نرم*افزارهايي براي پردازش بي*درنگ3 ويدئو روي کارت*هاي گرافيک وجود دارند. در ادامه اين مقاله قصد داريم ابزار مفيدي را معرفي کنيم، که از قدرت کارت*هاي گرافيکي رايج انويديا، از طريق نرم*افزار (به ادعاي سازندگانش زبان برنامه*نويسي) MATLAB4 استفاده مي*کند. اين کارت*ها عبارتند از جي*فورس سري 8 به بالا، Quadro و Tesla.
معرفي
GPUmat جعبه*ابزاري5 است که براي سريع*تر کردن محاسبات در نرم*افزار متلب (که براي محيط*هاي دانشگاهي نامي آشناست) طراحي شده است. به*نحوي که محاسبات را با پردازنده کارت*هاي گرافيک4 انجام مي*دهد. اگر از کاربران متلب هستيد که وقت زيادي را با آن صرف مي*کنيد، با استفاده از اين جعبه*ابزارها مي*توانيد کارهاي خود را سريع*تر انجام دهيد. اگرچه خود متلب اغلب سريع است ولي اگر داده*هاي شما بسيار زياد باشند، نياز به*اين جعبه*ابزار را احساس خواهيد کرد. اين جعبه*ابزار رايگان، براي مراکز علمي و تحقيقاتي بسيار مفيد است.
طريقه نصب
ابتدا از اينکه کارت*گرافيک ذکر شده در بالا را داريد، اطمينان حاصل کنيد و توجه کنيد که به نسخه MATLAB 2007 يا جديدتر از آن نياز داريد. سپس به سايت زير برويد و پس از انتخاب سيستم عامل CUDA 2.3، آن را دانلود کنيد که از سه نرم*افزار CUDA Driver و CUDA Toolkit و CUDA SDK تشکيل مي*شود و آنها را به همين ترتيب ذکر شده نصب کنيد:
http://www.nvidia.com/object/cuda_get.html (http://www.dvb5.info/redirector.php?url=http%3A%2F%2Fwww.nvidia.com%2Fo bject%2Fcuda_get.html)
سپس به سايت زير برويد وآخرين نسخه جعبه*ابزار GPUmat را براي سيستم عامل خود دريافت کنيد:
htpp://www.gp-you.org
اكنون فايل را از حالت آرشيو خارج کرده و پوشه GPUmat را باز کنيد و فايل GPUstart.m را درون اين پوشه پيدا و آدرس پوشه آن را کپي کنيد. نرم*افزار متلب را باز کنيد و از نوار ابزار File» Set Path… را انتخاب کنيد و آدرسي که کپي کرده*ايد را به مجموعه آدرس*هاي موجود اضافه کنيد. در پايان نيز به*خط فرمان متلب برويد و دستور GPUstart را اجرا کنيد. با اجراي اين دستور GPUmat به مجموعه جعبه*ابزارهاي MATLAB اضافه مي*شود.
طريقه استفاده از جعبه*ابزار
براي استفاده از اين جعبه *ابزار تنها بايد متغيري از نوع GPUsingle تعريف کنيد كه اين متغير روي کارت گرافيکي تعريف مي*شود. کاري که اين جعبه *ابزار انجام مي*دهد اين است که اکثر عملگر*ها و توابعي که جزو استاندارهاي متلب هستند را براي GPUsingle تعريف مي*کند و شما تنها کاري که انجام مي*دهيد اين است که اين توابع را صدا بزنيد. به*طور مثال، چهار دستور زير دو ماتريس Ah و Bh را از حافظه اصلي به حافظه کارت*گرافيک انتقال مي*دهد و ضرب ماتريسي را روي آنها انجام مي*دهد و در پايان حاصل را به حافظه اصلي برمي*گرداند و در Ch ذخيره كنيد:
Ad = GPUsingle(Ah);
Bd = GPUsingle(Bh);
Cd = Bd*Ad;
Ch = single(Cd);
تابع GPUsingle() متغيري را از حافظه اصلي به حافظه کارت گرافيک مي*برد. تابع single() عکس کار فوق را انجام مي*دهد. ورودي اين دو تابع مي*تواند در هر ابعادي باشد و خروجي آن معادل اندازه ورودي است. بين اين دو دستور مي*توانيد عمليات و محاسبات را انجام دهيد که اگر داده*ها از نوع GPUsingle باشند، عمليات به کارت* گرافيک فرستاده مي*شود.
توابع و عملگرهاي تعريف شده
در حال حاضر 50تابع و 14عملگر براي GPUsingle تعريف شده* است که از جمله توابع fft، sin، sum، exp و log و عملگرها جمع، تفريق، ضرب، ضرب نقطه*اي و عملگرهاي منطقي را مي*توان نام برد. نام توابع طوري انتخاب شده که درست همان کاري را انجام مي*دهند که تابع همنام در متلب انجام مي*دهند. براي اطلاع کامل از ليست توابع و عملگرها و برخي تابع*هاي حرفه*اي ديگر به سايت GPUmat که در بالا ذکر شد رجوع کنيد.
در انتها بايد يادآور شويم که GPUsingle داده*اي از نوع مميزشناور با دقت* ساده است و اين به علت محدوديت فعلي پردازنده کارت*هاي گرافيک است و اگر بخواهيد عمليات مميزشناور با دقت *مضاعف انجام دهيد، تبديل نوع داده به*صورت ضمني صورت مي*گيرد و بخشي از دقت عدد از دست مي*رود.
شرکت*هاي توليدکننده سخت*افزار در سراسر جهان بسيار زياد هستند و هر شرکتي پشتيباني خاصي از سخت*افزار توليدي خود مي*کند. اين شرکت*ها با در اختيار کاربر قرار دادن نرم*افزارهاي مختلفي، مي*کوشند تا کاربر از تمام قدرت سخت*افزار بهره بگيرد. از جمله سخت*افزارهايي که قدرت پردازش بسيار بالايي دارند و اغلب در سيستم*ها بيکار هستند، کارت*هاي گرافيک*اند. در سال*هاي اخير براي بر دوش کشيدن نسل*هاي جديد بازي*ها، کارت*هاي گرافيک بسيار پيشرفت کردند.
به موازات زماني که Athlon X2 4800 (پردازنده 2هسته*اي) توليد شد، GeForce 8500 (کارت*گرافيک 16هسته*اي) در بازار بود و سه سال بعد همراه با Core i7 (پردازنده 4هسته*اي)، کارت گرافيک GeForce GTX 285 (کارت گرافيک 240هسته*اي) نيز در بازار بود.
امروزه اين پتانسيل بالا در کارت*هاي گرافيکي باعث شده که توليدکنندگان با عرضه ميان*افزارهايي، اين محصولات را به عرصه*هاي ديگر نيز وارد کنند. از جمله اين ميان*افزارها CUDA Driver است که مخصوص کارت*هاي گرافيک انويديا است و کارت گرافيک را تبديل به پردازنده*اي همه*منظوره مي*کند. پس از نصب اين ميان*افزار، مي*توانيد از مجموعه نرم*افزارهايي که روي کارت گرافيک اجرا مي*شوند، بهره ببريد. براي نمونه نرم*افزارهايي طراحي شده*اند که عمليات كدگذاري1 و كدبرداري2 ويدئو را روي کارت*هاي گرافيک انجام مي*دهند که باعث صرفه*جويي در وقت و هزينه مي*شود و يا نرم*افزارهايي براي پردازش بي*درنگ3 ويدئو روي کارت*هاي گرافيک وجود دارند. در ادامه اين مقاله قصد داريم ابزار مفيدي را معرفي کنيم، که از قدرت کارت*هاي گرافيکي رايج انويديا، از طريق نرم*افزار (به ادعاي سازندگانش زبان برنامه*نويسي) MATLAB4 استفاده مي*کند. اين کارت*ها عبارتند از جي*فورس سري 8 به بالا، Quadro و Tesla.
معرفي
GPUmat جعبه*ابزاري5 است که براي سريع*تر کردن محاسبات در نرم*افزار متلب (که براي محيط*هاي دانشگاهي نامي آشناست) طراحي شده است. به*نحوي که محاسبات را با پردازنده کارت*هاي گرافيک4 انجام مي*دهد. اگر از کاربران متلب هستيد که وقت زيادي را با آن صرف مي*کنيد، با استفاده از اين جعبه*ابزارها مي*توانيد کارهاي خود را سريع*تر انجام دهيد. اگرچه خود متلب اغلب سريع است ولي اگر داده*هاي شما بسيار زياد باشند، نياز به*اين جعبه*ابزار را احساس خواهيد کرد. اين جعبه*ابزار رايگان، براي مراکز علمي و تحقيقاتي بسيار مفيد است.
طريقه نصب
ابتدا از اينکه کارت*گرافيک ذکر شده در بالا را داريد، اطمينان حاصل کنيد و توجه کنيد که به نسخه MATLAB 2007 يا جديدتر از آن نياز داريد. سپس به سايت زير برويد و پس از انتخاب سيستم عامل CUDA 2.3، آن را دانلود کنيد که از سه نرم*افزار CUDA Driver و CUDA Toolkit و CUDA SDK تشکيل مي*شود و آنها را به همين ترتيب ذکر شده نصب کنيد:
http://www.nvidia.com/object/cuda_get.html (http://www.dvb5.info/redirector.php?url=http%3A%2F%2Fwww.nvidia.com%2Fo bject%2Fcuda_get.html)
سپس به سايت زير برويد وآخرين نسخه جعبه*ابزار GPUmat را براي سيستم عامل خود دريافت کنيد:
htpp://www.gp-you.org
اكنون فايل را از حالت آرشيو خارج کرده و پوشه GPUmat را باز کنيد و فايل GPUstart.m را درون اين پوشه پيدا و آدرس پوشه آن را کپي کنيد. نرم*افزار متلب را باز کنيد و از نوار ابزار File» Set Path… را انتخاب کنيد و آدرسي که کپي کرده*ايد را به مجموعه آدرس*هاي موجود اضافه کنيد. در پايان نيز به*خط فرمان متلب برويد و دستور GPUstart را اجرا کنيد. با اجراي اين دستور GPUmat به مجموعه جعبه*ابزارهاي MATLAB اضافه مي*شود.
طريقه استفاده از جعبه*ابزار
براي استفاده از اين جعبه *ابزار تنها بايد متغيري از نوع GPUsingle تعريف کنيد كه اين متغير روي کارت گرافيکي تعريف مي*شود. کاري که اين جعبه *ابزار انجام مي*دهد اين است که اکثر عملگر*ها و توابعي که جزو استاندارهاي متلب هستند را براي GPUsingle تعريف مي*کند و شما تنها کاري که انجام مي*دهيد اين است که اين توابع را صدا بزنيد. به*طور مثال، چهار دستور زير دو ماتريس Ah و Bh را از حافظه اصلي به حافظه کارت*گرافيک انتقال مي*دهد و ضرب ماتريسي را روي آنها انجام مي*دهد و در پايان حاصل را به حافظه اصلي برمي*گرداند و در Ch ذخيره كنيد:
Ad = GPUsingle(Ah);
Bd = GPUsingle(Bh);
Cd = Bd*Ad;
Ch = single(Cd);
تابع GPUsingle() متغيري را از حافظه اصلي به حافظه کارت گرافيک مي*برد. تابع single() عکس کار فوق را انجام مي*دهد. ورودي اين دو تابع مي*تواند در هر ابعادي باشد و خروجي آن معادل اندازه ورودي است. بين اين دو دستور مي*توانيد عمليات و محاسبات را انجام دهيد که اگر داده*ها از نوع GPUsingle باشند، عمليات به کارت* گرافيک فرستاده مي*شود.
توابع و عملگرهاي تعريف شده
در حال حاضر 50تابع و 14عملگر براي GPUsingle تعريف شده* است که از جمله توابع fft، sin، sum، exp و log و عملگرها جمع، تفريق، ضرب، ضرب نقطه*اي و عملگرهاي منطقي را مي*توان نام برد. نام توابع طوري انتخاب شده که درست همان کاري را انجام مي*دهند که تابع همنام در متلب انجام مي*دهند. براي اطلاع کامل از ليست توابع و عملگرها و برخي تابع*هاي حرفه*اي ديگر به سايت GPUmat که در بالا ذکر شد رجوع کنيد.
در انتها بايد يادآور شويم که GPUsingle داده*اي از نوع مميزشناور با دقت* ساده است و اين به علت محدوديت فعلي پردازنده کارت*هاي گرافيک است و اگر بخواهيد عمليات مميزشناور با دقت *مضاعف انجام دهيد، تبديل نوع داده به*صورت ضمني صورت مي*گيرد و بخشي از دقت عدد از دست مي*رود.