ورود

مشاهده نسخه کامل : کودا (cuda) چیست؟ و برنامه نویسی تحت کودا



Jagvar
06-10-12, 15:03
سلامی به گرمای 980x با ولتاژ 1.6:1. (35):
عزیزان می خوام اول هدفم از زدن به این نام رو تشریح کنم و بعد می گم که قراره توی این تاپیک چه کارهایی صورت بگیره
برای اون دسته از دوستانی که در مورد nVIDIA CUDA شنیدن اما مطالب خاصی در موردش نمی دونن به صورت خلاصه: nVIDIA CUDA ابعاونه ای هست که برنامه نویسان با استفاده از اون می تونن از قدرت پردازشی کارت گرافیک در زمینه های مختلف می تونن از اون استفاده کنند.(به صورت عمومی بود)

خیلی از ماها منضورم اورکلاکرها و کسانی که High END باز هستند کارت های گرافیک های قدرت مندی داریم. و بعضی ها مون هم که از کارت های nVIDIA استفاده می کنیم. من می خوام دیدتون رو تغییر بدم و فقط استفاده معمول از این قدرت های بلقوه در راستای گیم و اورکلاک نباشه.
خیلی از افراد که در همچین فروم های تخصصی فعالیت می کنند برنامه نویسی رو دوست دارناما نمی دونن از کجا شزوع کنند و خیلی هم فقط استفاده از سخت افزار قدرتمند رو برای بازی و یا اورکلاک تهیه کردن و قشری هم هستن که امکانات سخت افزاری مناسبی ندارن ولی می تونن کد بنویسن.
خلاصه کلام این که دارم اینو دمبال می کنم که از قدرت بلقوه سخت افزار ها بهتر استفاده بشه.
مثال می زنم براتون foldinghome (Only the registered members can see the link) شاید شنیده باشید که یک برنامه Benchmark هستش که توسط آکدمیک های مختلف پیشنهاد شد و با پشتیبانی شرکت های سخت افزاری کمک های بسزایی در عرصه علمی به جامعه بشری کرده. (علاقه مندان می تونن سرچ بزنن)
شرکت EVGA هم در فروم خودش بخش ختصی رو برای این موضوع قرار داده
Only the registered members can see the link
(Only the registered members can see the link)
اما تا اینجا مقدمه ای بود که چیکار می خواییم بکینیم و چطور اینکارو انجام بدیم.

فراخوان: دوستان برنامه نویس و افراد برنامه نویس علاقه مند و اورکلاکر های که خواهان پیشرفت هستن می تونن برای رسیدن به یک هدف مشترک در کنار ما باشند.

اما چگونه و چطور؟
قدرت پردازشی کارن گرافیک های کنونی در بیشتر موارد چند ده برابر سی پی یو های کنونی قدرت پردازشی دارن و این به دلیل داشتن معماری خاصی هست که دارن، و در این بین شرکت های تولید کننده AMD و nVIDIA با معرفی فنآوری های مخصوص خودشون و بصورت مجزا این امکان رو فراهم کردن تا افراد با برنامهنویسی تحت GPU بتونن از این
قدرت در زمینه های پردازشی متنوعی استفاده کنند. CUDA یک فناوری هست که تسط شرکت nVIDIA معرفی شده و از سال 2006 به بعد با انتشار مستنداتی در مورد چگونگی استفاده از کودا راه جدیدی رو جلوی پای دانشمندان گذاشت تا بتونن در بیشتر موارد بدون نیاز به یک ابررایانه محاسباتی رو انجام بدن که قبلا فقط روی ابررایانه ها انجام می شده.
و ازطرفی نوع جدیدی از ابرکامپیوتر ها وارد عرصه شدن. CUDA تحت زبان برنامه نویسی C++ مارو قار می سازه تا برنامه های ویژه ای بنویسیم که قادر به پردازش موازی عظیمی از اطلاعات هست.
Only the registered members can see the link
(Only the registered members can see the link)ما قادر هستیم با مایکروسافت ویژوال C++ به راحتی از این فناوری استفاده کنیم و این تنها برای ویندوز نیست و کابران مکینتاش و لینوکس هم می تونن در سیستم عامل های خودشون با استفاده از این فناوری کد بنویسن.
اطلاعات جامع و کاملی خود شرکت انویدیا در اختیار توسعه دهندگان نرم افزاری قرار داده که این کمک بسزایی به توسعه دهندگان هست. اما در این بخش فعالیت برای ترجمه مستندات در این مورد خیلی خیلی کم صورت گرفته. اما با این وجود دانشجویان خلاقی هم بودن و هستن که تلاش برای اراعه ی مطلالب در این زمینه کرده اند. بنده به شخصه در دانشگاه صنعتی اصفهان پایان نامه دو نفر مجزا دیدم که در زمینه مکانیک و در مقطع کارشناسی ارشد برای حل معادلات تبدیل انرژی از کودا و قدرت کارت گرافیک استفاده کرده بودن. و این کار بسیار بزرگی هست. ولی مصلما خیلی کمه و باید روی اون بیشتر کار انجام بشه.

یک خواهش دارم دوستانی که در این زمینه تحقیقاتی داشتن از اشتراک گزاری اونها دریغ نکنند.
دوستانی که در زمینه ترجمه فعالیت می کنن و علاقه مند به کار دز این زمینه هستند می تونن در ترجمه بصورت گروهی به ما کمک زیادی کنند.
افرادی که با کد و برنامه نویسی آشنا هستن می تونن با توانایی هایی که داران مارو همراهیی کنند.
و در نهایت هم دوستان اورکلاکر و HighEND باز ها هم می تونن مارو همراهی کنند.
--------------------
سناریو:
با جمع شدن یک گروه علاقه مند به این کار و آموزش افراد و گسترش مستندات به زبان فارسی برای شروع کار می تونیم برنامهای برای محاسبه عدد PI بنویسیم که مثل برنامه super PI که برای سی پی یو است برای GPU هم بنویسیم که می تونیم در قدم اول مقایسه ای جالب رو در زمینه قدرت پردازشی CPU و GPU داشته باشیم

*********
لطفا نظرتون رو در این باره بیان کنید
:give_rose:

Jagvar
07-10-12, 10:10
دوستان اگه توجه کرده باشین من توی صحبت های قبلی از دانشگاه صنعتی اصفهان اسم بردم، اول این که مصلما جاهایی دیگه هم افرادی بودن و هستن که در این زمینه فعالیت کرده باشن. ولی اگر کسی اطلاعی در این مورد داره ممنون می شم قرار بده و دوم این که چون دانشگاه صنعتی اصفهان یک مرکز ابررایانه ای داره و کلا امکانات خوبی در اختیار دانشجو ها هست. از این بابت میشه چیزای جالبی پیدا کرد
این هم یک آموزش مختصر به زبان فارسی
Only the registered members can see the link
منابع مرجع هم به زودی لینک می دم

Jagvar
20-10-12, 20:47
سلامی دوباره

به لینک زیر هم توجه کنید
Only the registered members can see the link

عزیزان الان نیاز شدید به همکاری احساس میشه، من نشستم فهرست یکی از کتاب رو ترجمه کردم دوستان می تونن خود کتاب رو دانلود کنند و هر بخشی که براشون جزاب هستش رو ترجمه کنند
این هم لینک کتاب مورد نظر
Only the registered members can see the link
و این هم فهرستی که ترجمه کردم، در زمینه ترجمه فعالیتی نداشتم اگر کسی دوستان برای بعضی قسمت ها پیشنهادی هم داشتن به کمال میل می پزیرم
Only the registered members can see the linkدر%20مورد%20مقاله.docx
---------------
خوب همزمان دارم چنتا کار رو پیش می برم خیلی وقتم رو میگره
بریم سر قضیه نحوه محاسبه عدد پی یا همون 3.14
فرمول های زیادی برای محاسبه عدد پی پیشنهاد شده که می تونید اینجا بیشتر در موردش بخونید Only the registered members can see the linkπ
خودم تصمیم گرفتم در مرحله اول قبل از این که با خود کودا کد نویسی رو شروع کنم یکم قبلش یه آشنایی بیشتری باهاش پیدا کنم، نشستم و دوتا که پیچیدگی زمانی کمتری داشتن رو به یک برنامه کوچیک تبدیل کردم
فرمول اول
Only the registered members can see the link
که به فرمول BBP معروف هستش و از روی نام دانشمندانی که کشفش کردن برداشته شده Bailey–Borwein–Plouffe formula
این هم توضیحات بیشتر که اینجا می تونید پیدا کنید (Only the registered members can see the link–Borwein–Plouffe_formula) .
و یک فرمول دیگه هم که مشتق شده فرمول قبلی هست رو می تونید ببینید
(Only the registered members can see the link–Borwein–Plouffe_formula)Only the registered members can see the link

(Only the registered members can see the link–Borwein–Plouffe_formula)و این هم باز به نام دانشمند ی که کشف کرده نام گذاری شده و به نام "فابریک بلارد" معروف هست ( Fabrice Bellard)

که هر دو فرمول رو هم توی زبان c++ و هم در C# تبدیل به کد کردم و می تونید ببینید


C#:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;


namespace PI

{
class Program
{
static void Main(string[] args)
{

decimal p=0 ;
for (int i = 0; i < 100; i++)
{
p +=(decimal)((1.0 / Math.Pow(16, i)) * ((4.0 / ((8 * i) + 1)) - (2.0 / ((8 * i) + 4)) - (1.0 / ((8 * i) + 5)) - (1.0 / ((8 * i) + 6))));

}
Console.WriteLine("P is = {0} ",p);
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test PI.txt", true);
file.WriteLine(p);
file.Close();

}


}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;


namespace PI

{
class Program
{
static void Main(string[] args)
{

decimal p=0 ;
for (int i = 0; i < 100; i++)
{
p +=(decimal)((1.0 / Math.Pow(16, i)) * ((4.0 / ((8 * i) + 1)) - (2.0 / ((8 * i) + 4)) - (1.0 / ((8 * i) + 5)) - (1.0 / ((8 * i) + 6))));

}
Console.WriteLine("P is = {0} ",p);
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test PI.txt", true);
file.WriteLine(p);
file.Close();

}


}
}


C++:


#include <iostream>
#include<math.h>
using namespace std;
void main()
{
double p1=0,p2=0;
for(int i =0 ; i<100;i++)
{

p1+=((1.0/64)*((pow(-1.0,i)/pow(2.0,(10.0*i)))*((256.0/((10.0*i)+1))-(64.0/((10.0*i)+3))-(4.0/((10.0*i)+5))-(4.0/((10*i)+7))+(1.0/((10.0*i)+9))-(32.0/((4.0*i)+1))-(1.0/((4.0*i)+3)))));


p2+= ((1/ (pow (16.0,i))) * ((4.0/((8*i)+1))-(2.0/((8*i)+4))-(1.0/((8*i)+5))-(1.0/((8*i)+6))));

}

printf("PI = 3.141592653589793238462643383279502884197169399375 1058209 \n");
printf("P1 = %1.30f \n",p1);
printf("p2 = %1.30f \n",p2);
cout<<" "<<p1<<"\n"<<" "<<p2<<endl;
}




که برای C# فرمول اول و دوم رو جدا گذاشتم ولی برای C++ هردو توی یک برنام هست

™Ali
28-07-13, 03:01
سلام و خسته نباشید
یکی از روش های جالب برای محاسبه عدد پی الگوریتم Gauss-Legendre هست که در برنامه Super Pi از اون استفاده میشه.

اعداد اولیه الگوریتم:

Only the registered members can see the link

تابع بازگشتی الگوریتم:


Only the registered members can see the link

مقدار تقریبی عدد پی:


Only the registered members can see the link


یکی از امتیازات این الگوریتم اینه که با مقادیر پایین n میشه به دقت بالایی از عدد پی دست پیدا کرد. مثلاً با مقدار n = 3 تا چهارده رقم اعشار پی (و شاید هم بیش تر) صحیح به دست اومد.
این الگوریتم رو به زبان #C نوشتم. امیدوارم به کارتون بیاد:




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


// By Ali TM


namespace Pi
{
class Program
{
static void Main(string[] args)
{
int n = 3;
Console.WriteLine(Math.Pow(an(n) + bn(n), 2) / (4 * tn(n)));
Console.ReadKey();
}
static double an(int n)
{
if (n == 0)
return 1;


return (an(n - 1) + bn(n - 1)) / 2;
}


static double bn(int n)
{
if (n == 0)
return 1 / Math.Pow(2, 0.5);


return Math.Pow(an(n - 1) * bn(n - 1), 0.5);
}


static double tn(int n)
{
if (n == 0)
return 0.25;


return tn(n - 1) - pn(n - 1) * Math.Pow(an(n - 1) - an(n), 2);
}
static double pn(int n)
{
if (n == 0)
return 1;


return 2 * pn(n - 1);
}




}
}





تنها مشکل اینه که مقدار Double فقط تعداد محدودی از رقم های اعشار رو نشون میده. فکر کنم باید واسه این مشکل هم چاره ای اندیشید!! اگه نیاز به همکاری در این مورد هست شاید بتونم کمک کنم.:give_rose:

شاد باشید

iranch
27-06-15, 10:06
سلام
دوستان امکان به روز رسانی این تاپیک و معرفی مثال و کتاب ها و موارد بیشتر است؟
مثلا موازی نوشتن برنامه در کودا
و اینکه باید کارت گرافیک nvidia باشد. ان طور که من اطلاع دارم خوب nvidia و amd کارت گرافیک های مرجع رو تولید میکنند و بقیه کمپانی ها اونها رو بعضا ویرایش و تغیر میدن و روانه بازار میکنند
اینجا منظور این هست که فقط اون هسته اصلی nvidia باشد و مهم نیست چه برندی ساخته باشد ، کارت گرافیک رو؟