Knihovny pro CUDA J. Sloup a I. Šimeček

Podobné dokumenty
CUDA SDK Compiler (front/back end k existujícímu C/C++ kompilátoru) Debugger Profiler Knihovny např.: Cublas Cufft Curand Velký balík ukázkových příkl

CUDA J. Sloup a I. Šimeček

Základní rutiny pro numerickou lineární algebru. I. Šimeček, M. Šoch

Cvičení MI-PRC I. Šimeček

Operační systémy. Cvičení 4: Programování v C pod Unixem

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Cvičení MI-PAP I. Šimeček, M. Skrbek, J. Trdlička

IUJCE 07/08 Přednáška č. 1

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Algoritmizace a programování

Architektury VLIW M. Skrbek a I. Šimeček

dostat zdroják Petr Zemek Fakulta informačních technologií VUT v Brně izemek

Programování v C++ 3, 3. cvičení

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Pokročilé architektury počítačů

IUJCE 07/08 Přednáška č. 6

Singleton obsah. Motivace Základní myšlenka Implementace Problémy. Dědičnost Obecná implementace Shrnutí. destrukce vícevláknovost

Část 4 NOVÉ RYSY CUDA, NOVINKY V OBLASTI NÁSTROJŮ PRO CUDA

SUPERPOČÍTAČE DANIEL LANGR ČVUT FIT / VZLÚ

Část 2 POROVNÁNÍ VÝKONNOSTI A POUŽITELNOSTI ARCHITEKTUR V TYPICKÝCH APLIKACÍCH

PB071 Programování v jazyce C Jaro 2015

Jazyk C++ II. Šablony a implementace

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

přetížení operátorů (o)

Motivace. Software. Literatura a odkazy

Operační systémy. Cvičení 3: Programování v C pod Unixem

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Matematika v programovacích

Paralelní a distribuované výpočty (B4B36PDV)

GPGPU Aplikace GPGPU. Obecné výpočty na grafických procesorech. Jan Vacata

Základy programování (IZP)

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Mělká a hluboká kopie

PROGRAMOVÁNÍ V C++ CVIČENÍ

Singleton obsah. n Motivace. n Základní myšlenka. n Implementace. n Problémy. n Dědičnost. n Obecná implementace. n Shrnutí.

GPGPU. Jan Faigl. Gerstnerova Laboratoř pro inteligentní rozhodování a řízení České vysoké učení technické v Praze

Aplikovaná numerická matematika

Algoritmizace a programování

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

Jazyk C++, některá rozšíření oproti C

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základy programování (IZP)

PB161 Programování v jazyce C++ Přednáška 4

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Hornerovo schéma. je algoritmus výpočtu hodnoty polynomu P(x) v bodě x 0. eliminuje výpočet i-té mocniny převodem na postupné násobení.

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Standardní algoritmy v C++.

Základy programování (IZP)

Aplikovaná numerická matematika - ANM

Úvod do GPGPU J. Sloup, I. Šimeček

Závěrečná zpráva projektu Experimentální výpočetní grid pro numerickou lineární algebru

Závěrečná zpráva projektu Experimentální výpočetní grid pro numerickou lineární algebru

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Dynamické datové struktury III.

Základní datové struktury

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Abstraktní datové typy

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

PB161 Programování v jazyce C++ Přednáška 10

Šablony, kontejnery a iterátory

PB071 Programování v jazyce C

Racionální čísla, operátory, výrazy, knihovní funkce

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

5. Dynamické programování

12. Automatické vyhodnocení derivací. jaro 2012

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Programování v jazyce C a C++

Šablony, kontejnery a iterátory

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Paralelní a distribuované výpočty (B4B36PDV)

Základy programování (IZP)

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Vstupní a vstupní proudy v C++

Zápis programu v C a základní řídicí struktury

PB071 Programování v jazyce C Jaro 2013

přetížení operátorů (o)

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní a distribuované výpočty (B4B36PDV)

Funkce, procedury, složitost

Zpracoval:

BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 7., 9. a 10. listopadu 2017

Domácí úkoly 2013/14

Implementace numerických metod v jazyce C a Python

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Zpráva s popisem softwarového návrhu a specifikací rozhraní prototypového modulu pro odhad chyby a zjemnění sítě

Programovanie v jazyku C - to chce dynamiku

Funkce, intuitivní chápání složitosti

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

Racionální čísla, operátory, výrazy, knihovní funkce

Část I. Část 1 Zápis programu v C. Přehled témat. Zápis programu v C a základní řídicí struktury. Program je recept

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Ovládání LCD. Ing. Josef Grosman. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

Transkript:

Knihovny pro CUDA J. Sloup a I. Šimeček xsimecek@fit.cvut.cz Katedra počítačových systémů FIT České vysoké učení technické v Praze Ivan Šimeček, 2011 MI-PRC, LS2010/11, Predn.10 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti

CUDA SDK Compiler (frontend k existujícímu C/C++ kompilátoru) Debugger Profiler Libraries: Cublas Cufft Cudpp (Data Parallel Primitives Library) Curand Cusparse Velký balík ukázkových příkladů Hlavní podporované jazyky: C/C++ Fortran

CUBLAS Implementace standardní knihovny BLAS pro GPU Stejné rozhraní jako původní BLAS, minimální změny kódu při převodu z CPU na GPU

CUBLAS příklad I #include <stdio.h> #include <stdlib.h> #include <math.h> #include <cublas.h> #define M 6 #define N 5 // rozměry matice #define IDX2C(i,j,ld) (((j)*(ld))+(i)) //mapovací funkce void modify (float *m, int ldm, int n, int p, int q, float alpha,float beta) { cublassscal (n-p, alpha, &m[idx2c(p,q,ldm)], ldm); cublassscal (ldm-p, beta, &m[idx2c(p,q,ldm)], 1); }

CUBLAS příklad II int main(int argc, char *argv[]) { int i, j; cublasstatus stat; float* devptra; float* a = 0; a = (float *)malloc (M * N * sizeof (*a)); for (j = 0; j < N; j++) { for (i = 0; i < M; i++) { a[idx2c(i,j,m)] = i * M + j + 1; } } // naplnění matice

CUBLAS příklad III // inicializace knihovny cublasinit(); // alokace místa pro matici stat = cublasalloc (M*N, sizeof(*a), (void**)&devptra); if (stat!= CUBLAS_STATUS_SUCCESS) { printf ("device memory allocation failed"); return 1; } //nahrání matice z CPU na GPU cublassetmatrix (M, N, sizeof(*a), a, M, devptra, M); //vlastní lineární operace na GPU modify (devptra, M, N, 1, 2, 16.0f, 12.0f);

CUBLAS příklad IV //nahrání matice z GPU na CPU cublasgetmatrix (M, N, sizeof(*a), devptra, M, a, M); //uvolnění matice cublasfree (devptra); cublasshutdown(); for (j = 0; j < N; j++) { for (i = 0; i < M; i++) { printf ("%7.0f", a[idx2c(i,j,m)]); } printf ("\n"); } return 0; }

CUFFT Knihovna pro provedení FFT (efektivní algoritmus pro spočtení diskrétní Fourierovy transformace=dft a její inverze) na GPU K dispozici různé verze výpočtu

CUFFT příklad I cuffthandle plan; cufftcomplex *devptr; cufftcomplex data[nx*batch]; int i; // vytvoření zdrojových dat for(i= 0 ; i < NX*BATCH ; i++){ data[i].x = 1.0f; data[i].y = 1.0f; } // alokace paměti na GPU cudamalloc((void**)&devptr,sizeof(cufftcomplex)*nx*ba TCH);

CUFFT příklad II // zkopírování do GPU cudamemcpy(devptr, data, sizeof(cufftcomplex)*nx*batch, cudamemcpyhosttodevice); // spočítá 1D FFT plan cufftplan1d(&plan, NX, CUFFT_C2C, BATCH); // vlastní dopřednou FFT cufftexecc2c(plan, devptr, devptr, CUFFT_FORWARD); // zpětná FFT cufftexecc2c(plan, devptr, devptr, CUFFT_INVERSE); // zkopírování z GPU cudamemcpy(data, devptr, sizeof(cufftcomplex)*nx*batch, cudamemcpydevicetohost); // dealokace všeho cufftdestroy(plan); cudafree(devptr);

CUDPP CUDPP = CUDA Data Parallel Primitives Library. Knihovna primitivních funkcí, vhodných jako základ složitějších paralelních algoritmů Obsahuje: paralelní prefix-sum operaci, paralelní řazení paralelní redukci. Atd.

CURAND Knihovna pro generování náhodných čísel K dispozici ruzné typy generátorů

CUSPARSE Podmnožina BLAS pro řídké matice Současná verze 4.0 obsahuje: Operace typu řídký vektor x hustý vektor Operace typu řídká matice x hustý vektor Operace typu řídká matice x sada hustých vektorů Podpora formátů hustý, COO, CSR, CSC Navíc i řešič pro troúhelníkové řídké matice

THRUST Knihovna paralelních algoritmů pro GPU Objektově orientovaný přístup Rozhraní obdobné the C++ Standard Template Library (STL).

THRUST příklad I #include <thrust/device_vector.h> #include <thrust/host_vector.h> #include <thrust/transform_reduce.h> #include <thrust/functional.h> #include <thrust/extrema.h> // Během jedné redukce spočtu minimum i maximum // minmax_pair obsahuje minimum a maximum template <typename T>struct minmax_pair{ T min_val; T max_val;}; // fce, která minmax_pair je inicializován na hodnotu x.

THRUST příklad II template <typename T>struct minmax_unary_op : public thrust::unary_function<t,t>{ host device minmax_pair<t> operator()(const T& x) const { minmax_pair<t> result; result.min_val = x; result.max_val = x; return result; }}; // minmax_binary_op je fce,která vybere min a max // ze dvou párů hodnot

THRUST příklad III template <typename T>struct minmax_binary_op : public thrust::binary_function<t,t,t>{ host device minmax_pair<t> operator()(const minmax_pair<t>& x, const minmax_pair<t>& y) const { minmax_pair<t> result; result.min_val = thrust::min(x.min_val, y.min_val); result.max_val = thrust::max(x.max_val, y.max_val); return result; }};

THRUST příklad IV int main(void){ // initializace pole int x[7] = {-1, 2, 7, -3, -4, 5}; // zkopírování do GPU thrust::device_vector<int> d_x(x, x + 7); minmax_unary_op<int> unary_op; minmax_binary_op<int> binary_op; // initializace prvním prvkem minmax_pair<int> init = unary_op(d_x[0]); // spočítání minima a maxima minmax_pair<int> result = thrust::transform_reduce(d_x.begin(), d_x.end(), unary_op, init, binary_op); // tisk std::cout << result.min_val << std::endl; std::cout << result.max_val << std::endl; }

Knihovny pro LA MAGMA (Matrix Algebra on GPU and Multicore Architectures). http://icl.cs.utk.edu/magma/index.html Obdoba ScalaPacku ale pro hybridní výpočty (kombinace CPU a GPU)

Knihovny pro LA The SpeedIT Tools library. Řešiče soustav lineárních rovnic pro různé typy matic http://speedit.vratis.com/

Knihovny pro LA Jacket (pro Matlab),LibJacket (pro C/C++). http://www.accelereyes.com/products/libjack et Knihovna rutin pro numerickou lineární algebru