Відмінності між версіями «GPGPU»
Shore (обговорення • внесок) |
|||
(Не показано 3 проміжні версії 3 користувачів) | |||
Рядок 1: | Рядок 1: | ||
− | {{ | + | {{Невідредаговано}} |
− | |||
{{Студент |img=Нема | Name=Мотиль| Surname= Галина| FatherNAme=Ярославівна |Faculti=ФІС | Group=СНм-51 | Zalbook=СН-10-090}} | {{Студент |img=Нема | Name=Мотиль| Surname= Галина| FatherNAme=Ярославівна |Faculti=ФІС | Group=СНм-51 | Zalbook=СН-10-090}} | ||
Рядок 33: | Рядок 32: | ||
[[Файл:Pidhid_CUDA.JPG |200px|thumb|right|Основний підхід в технологіяї CUDA]]Первинна версія CUDA SDK була представлена 15 лютого 2007 року. У основі CUDA API лежить розширена мова C. Для успішної трансляції коду цією мовою, до складу CUDA SDK входить власний C-компілятор командного рядка nvcc компанії Nvidia. Компілятор nvcc створений на основі відкритого компілятора Open64 і призначений для трансляції host-коду (головного коду, що управляє) і device-коду (апаратного коду) (файлів з розширенням .cu) в об'єктні файли, придатні в процесі збирання кінцевої програми або бібліотеки в будь-якому середовищі програмування. | [[Файл:Pidhid_CUDA.JPG |200px|thumb|right|Основний підхід в технологіяї CUDA]]Первинна версія CUDA SDK була представлена 15 лютого 2007 року. У основі CUDA API лежить розширена мова C. Для успішної трансляції коду цією мовою, до складу CUDA SDK входить власний C-компілятор командного рядка nvcc компанії Nvidia. Компілятор nvcc створений на основі відкритого компілятора Open64 і призначений для трансляції host-коду (головного коду, що управляє) і device-коду (апаратного коду) (файлів з розширенням .cu) в об'єктні файли, придатні в процесі збирання кінцевої програми або бібліотеки в будь-якому середовищі програмування. | ||
В даній технології головна задача розбивається на підзадачі(блоки), які можна вирішувати незалежно одна від одної. | В даній технології головна задача розбивається на підзадачі(блоки), які можна вирішувати незалежно одна від одної. | ||
− | Відповідно, кожна з підзадач вирішується набором взаємодіючих між собою | + | Відповідно, кожна з підзадач вирішується набором взаємодіючих між собою паралельних “ниток”. |
− | |||
== Роботи з текстурною пам'яттю == | == Роботи з текстурною пам'яттю == | ||
Рядок 112: | Рядок 110: | ||
#[http://www.intuit.ru/search?text=cuda Массивно-параллельные вычисления с использованием технологии CUDA] | #[http://www.intuit.ru/search?text=cuda Массивно-параллельные вычисления с использованием технологии CUDA] | ||
#[http://ru.wikipedia.org/wiki/GPGPU GPGPU] | #[http://ru.wikipedia.org/wiki/GPGPU GPGPU] | ||
− | |||
− | |||
− | |||
− |
Поточна версія на 18:42, 5 березня 2012
Цю статтю потрібно відредагувати. Щоб вона відповідала ВИМОГАМ. |
Нема | ||
Імя | Мотиль | |
Прізвище | Галина | |
По-батькові | Ярославівна | |
Факультет | ФІС | |
Група | СНм-51 | |
Залікова книжка | СН-10-090 |
GPGPU(General-Purpose computing on Graphics Processing Units) - техніка використаня графічного процесора відеокарти для загальних обчислень, які зазвичай виконує центральний процесор.
Зміст
Передумови виникнення GPGPU
Вже в 2003 ріоці, Intel і AMD брали участь у спільній гонці за самий потужний процесор. Всього за кілька років у результаті цієї гонки тактові частоти суттєво зросли, особливо після виходу Intel Pentium 4.
Але перегони швидко наближалася до межі. Після хвилі величезного приросту тактових частот (між 2001 і 2003 роками тактова частота Pentium 4 подвоїлася з 1,5 до 3 ГГц), користувачам довелося задовольнятися десятими частками гігагерц, які змогли вичавити виробники (з 2003 до 2005 тактові частоти збільшилися всього з 3 до 3,8 ГГц). Розробники архітектури CPU підійшли до закону скорочення приросту: число транзисторів, що було потрібно додати для потрібного збільшення продуктивності, ставало все більшим, заводячи в глухий кут.Поки виробники CPU рвали на голові останнє волосся, намагаючись знайти вирішення своїх проблем, виробники GPU продовжували чудово вигравати від переваг закону Мура. Робота GPU відносно проста. Вона полягає у прийнятті групи полігонів з одного боку і генерації групи пікселів з іншого. Полігони і пікселі незалежні один від одного, тому їх можна обробляти паралельно. Таким чином, в GPU можна виділити велику частину кристала на обчислювальні блоки, які, на відміну від CPU, будуть реально використовуватися. GPU відрізняється від CPU не тільки цим. Доступ до пам'яті в GPU дуже пов'язаний - коли записується піксель, то через кілька тактів буде записуватися сусідній. Розумно організовуючи пам'ять, можна отримати продуктивність, близьку до теоретичної пропускної здатності. Це означає, що GPU, на відміну від CPU, не потрібно великого кеша, оскільки його роль полягає у прискоренні операцій текстурування. В результаті, з'явився такий напрямок, як GPGPU
Основними властивостями якого є:
- Використання графічного процесора для вирішення неграфічних задач;
- Вся робота з GPU іде через API (OpenGL, D3D);
- Програми використовують відразу 2 мови: одну традиційну(С++) і одну шейдерну;
- Обмеження, притаманні графічним API;
Технологія CUDA
CUDA (. Compute Unified Device Architecture) — технологія GPGPU (англ. General-purpose computing on Graphics Processing Units), що дозволяє програмістам реалізовувати мовою програмування С алгоритми, що виконуватимуться на графічних процесорах Geforce восьмого покоління і старше (Geforce 8 Series, Geforce 9 Series, Geforce 200 Series), Nvidia Quadro і Tesla компанії Nvidia. Технологія CUDA розроблена компанією Nvidia. Технологія CUDA — це середовище розробки на С, яка дозволяє програмістам і розробникам писати програмне забезпечення для вирішення складних обчислювальних завдань за менший час завдяки багатоядерній обчислювальній потужності графічних процесорів. Простіше кажучи, графічна підсистема комп'ютера з підтримкою CUDA може бути використана, як обчислювальна. CUDA дає розробникові можливість на свій розсуд організовувати доступ до набору інструкцій графічного прискорювача і управляти його пам'яттю, організовувати на ньому складні паралельні обчислення. Графічний процесор з підтримкою CUDA стає потужною програмованою відкритою архітектурою подібно до сьогоднішніх центральних процесорів. Все це надає в розпорядження розробника низькорівневий, розподілюваний і високошвидкісний доступ до устаткування, роблячи CUDA необхідною основою при побудові серйозних високорівневих інструментів, таких як компілятори, відладчики, математичні бібліотеки, програмні платформи. Використовує grid-модель пам'яті, кластерне моделювання потоків і SIMD інструкції. Застосовується в основному для високозатратних графічних обчислень і розробок nvidia-сумісного графічного API. Включена можливість підключення до застосунків, що використовують OpenGL 9 і Microsoft Direct3D . Створений у версіях для Linux і Windows.
Первинна версія CUDA SDK була представлена 15 лютого 2007 року. У основі CUDA API лежить розширена мова C. Для успішної трансляції коду цією мовою, до складу CUDA SDK входить власний C-компілятор командного рядка nvcc компанії Nvidia. Компілятор nvcc створений на основі відкритого компілятора Open64 і призначений для трансляції host-коду (головного коду, що управляє) і device-коду (апаратного коду) (файлів з розширенням .cu) в об'єктні файли, придатні в процесі збирання кінцевої програми або бібліотеки в будь-якому середовищі програмування.В даній технології головна задача розбивається на підзадачі(блоки), які можна вирішувати незалежно одна від одної. Відповідно, кожна з підзадач вирішується набором взаємодіючих між собою паралельних “ниток”.
Роботи з текстурною пам'яттю
Текстурна пам'ять успадкувала свою назву і функціональність від терміну "текстура" 3D графіки. По суті, текстурна память - це механізм кешування ділянок глобальної пам'яті. Текстура, як правило, представляє собою 2D-масив і текстурна пам'ять спочатку була оптимізована під вибірку 2D даних фіксованого розміру. Після виділення області глобальної памятті допомогою спеціальної функції(cudaBindTexture*)вказівника, що дана ділянка памяті має розглядатися як текстура.Один блок Texture доступний відразу для декількох мультипроцесорів . Даний блок реалізує в собі фіксовану функціональність по зверненню типу read-only до певних ділянок пам'яті. В силу такого графічного минулого текстури, пояснюють деякі можливості даного модуля:
- Фільтрація текстурних координат
- Білінійна або точкова інтерполяція
- “розумне” повернення значення, у випадку коли значення текстурних координат виходить за межі допустимої границі
- Звернення по нормальним або цілочисельним координатам
- Повернення нормалізованих значень
- Кешування даних
Фільтрація. Згортка
Використовуючи текстури, можна розглянути застосування CUDA в обробці цифрових сигналів. Якщо дані 2 функції f(x) і g(x), інтигруючихся на R, то з математичної точки зору, згортку можна представити у вигляді функції:
Або в дискретній формі:
Будь-який сигнал можна розложити на суму одиничних імпульсів, зсунутих в часі і помножених на деякі коефіцієнти.
Приклад. Gaussian Blur
Gaussian Blur - фільтрація, при якій можна використати врівноваження,яке буде пропорційно відстані від поточного пікселя. Для векторного сигналу Гаусове розмиття задає ваги по такій формулі:
Для двомірного сигналу Гаусове розмиття задається аналогічно:
Дана фільтрація має хорошу властивість сепарабельності: для фільтрації зображення можна спочатку провести фільтрацію по горизонталі, а потім - окремо по вертикалі. Розмиття по суті являється низькочастотним фільтром. Можна розглянути деякі випадкову величину (шумову функцію), рівномірно розподілену. З математичним сподіванням рівним 0.Тоді коли зображення буде одноколірним, але в кожному пікселі відбулося випадкове відхилення,то розмиття призведе до того, що шум просумується в деякій області даного пікселя, і тим самим при збільшенні радіуса області, можна ефективно подавити шум.
Приклад функції Gaussian Blur з допомогою CUDA
texture <ucar4, 2, CudaReadModeNormalizedloat> g_Gaussian; _global_ void GaussianX_kernel (uchar4 * pDst, float radius, float sigma_sq, unit32 w, unit32 h, unit32 p) { int tidx = threadIdx.x + blockIdx.x + blockDim.x; int tidy = threadIdx.y + blockIdx.y + blockDim.y; if (tidx < w && tidy < h) { float4 r = {0.0f,0.0f, 0.0f, 0.0f}; float weight_sum=0.0f; float weigth = 0.0f; for (int_ic = -radius; ic <= radiuc; ic++) { weigth = exp(-(ic*ic))/sigma_sq); r += tex2D (g_Gaussian,tidx + 0.5f + ic, tidy+0.5f)* weight; weight_sum += weight; } r/=weight_sum; pDst[tidx + tidy * p] = uc4(r*255.0f); } }
Аналоги технології CUDA
ATI Stream
набір передових апаратних і програмних технологій, що дозволяють графічному і центральному процесорам узгоджено працювати, в цілях прискорення не тільки графічних задач. Це приводить до покращення збалансованості платформ, спроможних швидше ніж раніше спарвлятися з виконанням ресурсоємних задач.
BrookGPU
є компілятор Стенфордського університету. BrookGPU компілює програми, написані з використанням програмування Брук потокової мови, який є варіантом ANSI C. Він може використовувати OpenGL v1.3 +, DirectX v9 +.
Список використаних джерел
- Боресков А.В., Харламов А.А. основи работи з технологией CUDA. – М.:ДМК Прес, 2010.
- nVidia CUDA: вычисления на видеокарте
- www.3dnews.ru/video/t-and-l
- Графічний_процесор
- Массивно-параллельные вычисления с использованием технологии CUDA
- GPGPU