X
تبلیغات
رایتل

CUDA Programming Applications

نحوه تنظیمات کتابخانه opencv در visual studio

برای استفاده از توابع کتابخانه opencv در محیط visual studio پس از دانلود آخرین ورژن opencv از سایت opencv.org (با فیلتر شکن) و نصب آن یک پوشه به همین نام در درایو C ایجاد می شود

سپس بعد از ایجاد پروژه جدید سی پلاس پلاس مراحل زیر را به ترتیب انجام می دهیم
1-Include




2-Add liberary






در نهایت به این دو اسم lib. اضافه کرده و دکمه ok  را میزنیم و هم اکنون پروژه آماده استفاده از توابع کتابخانه opencv می باشد

پردازش تصویر در کودا

در این قسمت در نظر دارم نمونه تست پردازش تصویر که در کودا انجام دادم را برای شما عزیزان به اشتراک بگذارم.

در ابتدا با استفاده از توابع کتابخانه opencv تصویر را می خوانیم

سپس در کرنل کودا شمارنده ای از جنس thread تعریف نموده و دستور اصلی برنامه که می خواهیم هر پیکسل تصویر را در0.6 ضرب کند می نویسیم

سپس در قسمت main برنامه تصویر را خوانده و دو آرایه تعریف نموده و تصویر را به آرایه انتقال می دهیم سپس همانند جمع و ضرب آرایه ها که در قسمتهای قبلی گفته شد آن آرایه را به حافظه جی پی یو انتقال می دهیم و سپس تابع هسته اصلی کودا را فراخوانی می کنیم و دوباره آرایه را به حافظه سی پی یو منتقل می نماییم و سپس با دستور Mat Out = Mat(im.rows, im.cols, CV_8UC1, array1);آرایه را به Mat  تبدیل می نماییم تا بتوانیم با دستور imshow کتابخانه opencv نمایش دهیم.



,  و نتیجه کار:


که همانطور که مشاهده نمودید تصویر تیره تر شد.

کتاب جدید Cuda



لینک دانلود

نحوه تنظیم پشته و افزایش حجم ان

تنظیم پشته و افزایش حجم آن

در برخی از مواردکه با سایزهای بزرگی از ماتریس و یا بردار سرو کار دارید ، در هنگام انجام عملیات بر روی آنها احتمالا با خطایی مطابق شکل زیر مواجه شوید که مربوط به کمبود حجم حافظه stack است که بایستی این حجم را بطور دستی افزایش دادکه روند ان در زیر آمده است.



1-از نوار ابزار بالا گزینه project و سپس گزینه آخر properties را انتخاب می نماییم



2- در تب linker گزینه system را انتخاب می نماییم



3- سپس آیتمهای stack commit size و stack reserve size را با مقادیر بزرگ مثلا 100000 تنظیم می نماییم


تخصیص حافظه پویا

در زبان سی برای تخصیص حافظه پویا یعنی در زمان اجرا از تابع malloc استفاده می شود پس از خروج از یک تابع لازم است حافظه ای را که با استفاده از تابع malloc تخصیص داده اید را با استفاده از تابع free به سیستم باز گردانید،متغیرهایی که در یک تابع تعریف می شود در هنگام خروج از یک تابع به سیستم بازگردانده می شودولی حافظه ای را که با استفاده از تابع malloc تخصیص می دهیم در انتها آزاد نمی شود،بوسیله تابع free حافظه تخصیص داده شده با malloc را آزاد می نماییم.اگر حافظه آزاد نشود سبب نشتی حافظه (memory leak)می شود.

الگوی تابع:

Void * malloc(size_t size)

در صورت موفقیت اشاره گری به ابتدای بلوکی از حافظه تخصیص می یابد ، نوع خروجی از جنس void* است که میبایستی بر اساس نوع مورد نظر casting صورت پذیرد.در غیر اینصورت خطای compile گزارش داده می شود که در صورت عدم موفقیت صفر و یا null را باز می گرداند.

در زبان سی پلاس پلاس برای تخصیص حافظه پویا (در زمان اجرا) از تابع new استفاده می شود.پس از خروج از یک تابع لازم است حافظه ای را که تخصیص داده اید به سیستم بازگردانید.متغیرهایی که در یک تابع تعریف می شود در هنگام خروج از تابع به سیستم بازگردانده می شود ولی حافظه ای را که با استفاده از تخصیص حافظه پویا در نظر گرفته می شود در انتها آزاد نمی شود.

بوسیله تابع delete حافظه تخصیص داده شده را آزاد می نماییم اگر حافظه آزاد نشود نشتی حافظه و یا memory leak اتفاق خواهد افتاد.

اشاره گر= new < <نوع

delete اشاره گر

int*pn=new int;

delete pn;

اشاره گر= new <نوع>[طول آرایه]

delete [ ] اشاره گر

int*p=new int[20];

delete [ ] p;

 





Stack Memory یک رنج مشخص شده از حافظه است که از طریق رجیستر کردن در cpu قابل دسترسی است ،پشته در زبان اسمبلی بعنوان راهی برای پیاده سازی پرش به کد زیر مجموعه و برگشت استفاده می شد و در جای دیگر برای رسیدگی به وقفه های سخت افزاری

برای مثال در طول یک وقفه استک برای ذخیره سازی چند نوع رجیستر سی پی یو استفاده می شد، شامل status (که هر کدام نتیجه عملگر را نشان می داد)و شمارنده برنامه(هنگام رخداد وقفه)،حافظه استک در طراحی سی پی یو معمولا بسیار بزرگ است و سرعت Alloc و DeAlloc آنها خیلی بالاست چون موکدا از طراحی LIFO استفاده می کنند که یک مثال ساده از ان عملگر های move و inc و dec است

Heap Memory یک حافظه بسیار ساده است که پس از اینکه برنامه بارگذاری و حافظه پشته اختصاص داده شد هنوز باقی مانده و احتمالا هنوز متغیر های عمومی داخل آن باشد

در C++ حافظه پشته جایی است که متغیرهای محلی ذخیره و یا ساخته می شوند و همچنین جایی است که پارامترهای ارسال شده به توابع را نگه می دارد و در کلاس std::stack است که پارامترها را در ان ریخته و تابعی را صدا می زند و تابع می داند که پارامتر مد نظر در انتهای پشته می تواند پیدا شود و همچنین تابع می تواند متغیرهای محلی را در پشته بریزد و قبل از برگشت از تابع انها را خارج نماید.

جهت کاربرد در سایز های بزرگ برای جلوگیری از هدر رفتن حافظه بهتر است که از حافظه پویا استفاده شود
<< 1 2 3 4 5 6 >>