نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
کرنل در واقع همون کد parallel هستش که تحت قالب یک function می نویسید که تو آن متغیر های intrinsic مربوط به گرید از جمله blockID و threadID هستش که شما با این ساختار می تونید به حافظه به صورت چند بعدی دسترسی داشته باشید.
ماهیت کار بایستی به صورت موازی باشه که طرف بخاد از gpu استفاده کنه به یک مثال بگم شما میخاید لیست از feature ها رو آموزش بدید و کلاسیفیر شما رو gpu هستش حالا اگر اندازه feature ها کوچک باشه این انتقال داده از سمت cpu یا host به سمت device یا gpu مقرون به صرفه نیست چون شما داده رو ram دارید حالا بایستی که بایستی هی cumalloc کنید و هی cumemcpy همون طور هم خودتون می تونید هر جفتش زمان گیره بجز اینکه راهی پیدا کنید که داده ها را به صورت bulck انتقال بدید و سمت gpu پروسس کنید که باز هم به طبیعت مسئله بستگی داره.
نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
خب تیکه تیکه بگیر دیگه این انداره ک شما می خوای نمیشه گرفت
اون کدی ک دادمو نکا کن ببین بدرت می خوره یا نه :عصبانی++:
نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
نقل قول:
نوشته شده توسط
__UFNHGGI_H__
کد رو بزار
اون خطا واس اینه ک حالت استاتیک حافظه گرفتی و حجمش زیاد هست
96*380*380 تا دابل میشه 110 مگ . خیلی خیلی زیاده
بیشتر از 16 مگ نگیری بهتره چون تا هردفعه ک برنامه رو اجرا می کنی ممکنه اون قدر فضای خالی پیدا نشه .
می تونی از چند تا ارایه استفاده کنی عوض اینکه یهو کلی فضا بگیری
اینطوری
#define HEAPSIZE 256000
#define ALLOCKCOUNT 8192
double* arr[ALLOCKCOUNT];
for(int i = 0; i < ALLOCKCOUNT; i++)
arr[i] = new double[HEAPSIZE];
double GetItem(int index)
{
return arr[index/HEAPSIZE][index % HEAPSIZE];
}
double a = GetItem(1231231);
دوست عزیز یه خورده درمورد کدتون توضیح میدین؟
اون فضایی رو که من می خوام در دسترس قرار میده؟
من 66 تا مشتق جزیی دارم که هرکدوم آرایه 380*380*96 میخواد
الان کدتون همچین فضایی برای من درست می کنه؟
نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
نقل قول:
نوشته شده توسط
__UFNHGGI_H__
خب تیکه تیکه بگیر دیگه این انداره ک شما می خوای نمیشه گرفت
اون کدی ک دادمو نکا کن ببین بدرت می خوره یا نه :عصبانی++:
دوست عزیز یه خورده درمورد کدتون توضیح میدین؟
اون فضایی رو که من می خوام در دسترس قرار میده؟
من 66 تا مشتق جزیی دارم که هرکدوم آرایه 380*380*96 میخواد
الان کدتون همچین فضایی برای من درست می کنه؟
عصبانی نباشید تروخدا.
اساتید دانشگاهم اگر بخوان انقدر زود داغ کنن که فاتحه هرچی دانشجو خونده س.
حالا بگذریم از ستاره شناسا که سال ها روی یه موضوعی هی تحقیق می کنن:متعجب:
اندکی صبر سحر نزدیک است:لبخندساده:
نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
یافتم
نقل قول:
const int nx = DATAXSIZE;
توی پست اولم هم گفتم که از size_t استفاده کنید.
در ضمن بهتره از malloc استفاده نکنید چون فقط سرعتتون رو میاره پایین.
نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
اره
اینطوری هر چقدر ک می خوای میشه
الان من تو این کد 380 تا جدا جدا حافظه گرفتم ک هر کدوم 36480 تا دابل هست .
فقط کافیه از این دو تا تابع برا مقدار دهی و مقدار دادن استفاده کنی همین .
#define HEAPSIZE (380*96)
#define ALLOCKCOUNT 380
double* arr[ALLOCKCOUNT];
for(int i = 0; i < ALLOCKCOUNT; i++)
arr[i] = new double[HEAPSIZE];
double GetVal(int index)
{
return arr[index/HEAPSIZE][index % HEAPSIZE];
}
void SetVal(int index, double val)
{
arr[index/HEAPSIZE][index % HEAPSIZE] = val;
}
نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++ 2010
نقل قول:
نوشته شده توسط
__UFNHGGI_H__
اره
اینطوری هر چقدر ک می خوای میشه
الان من تو این کد 380 تا جدا جدا حافظه گرفتم ک هر کدوم 36480 تا دابل هست .
فقط کافیه از این دو تا تابع برا مقدار دهی و مقدار دادن استفاده کنی همین .
#define HEAPSIZE (380*96)
#define ALLOCKCOUNT 380
double* arr[ALLOCKCOUNT];
for(int i = 0; i < ALLOCKCOUNT; i++)
arr[i] = new double[HEAPSIZE];
double GetVal(int index)
{
return arr[index/HEAPSIZE][index % HEAPSIZE];
}
void SetVal(int index, double val)
{
arr[index/HEAPSIZE][index % HEAPSIZE] = val;
}
این کار غیر ممکنه.
به این دلیل:
CUDA_CHECK_RETURN(cudaMalloc((void**) &devBuffer, BUFFER_SIZE))
CUDA_CHECK_RETURN(
cudaMemcpy(devBuffer, hostBuffer, BUFFER_SIZE, cudaMemcpyHostToDevice));