TROCH HISTORII Marek Zajc Marek Zajc Marek Zajc
- Slides: 39
TROCHĘ HISTORII Marek Zając
Marek Zając
Marek Zając
PO CO UŻYWAĆ OPENCL? Marek Zając
Intel Core i 5 2550 k OC 4, 2 GHz Marek Zając AMD Radeon HD 7870 OC 1, 1 GHz
Intel Core i 5 2550 k AMD Radeon HD 7870 4 rdzenie 1280 rdzeni Marek Zając
Marek Zając
Marek Zając
DLACZEGO NIE UŻYWAĆ OPENCL? Marek Zając
Marek Zając
CZEGO NAM TRZEBA? Marek Zając
Marek Zając
Marek Zając
CZAS NA NAJLEPSZE! Marek Zając
KOD! Marek Zając
TRADYCYJNE PODEJŚCIE Marek Zając
double* tab = new double[10000]; //prepare array. . . //. . . for(int i = 0; i < 10000; i++) { tab[i] *= 2. 5; } Marek Zając
OPENCL Marek Zając
double* tab = new double[10000]; //prepare array. . . //. . . … Marek Zając
… cl_int err; cl: : vector<cl: : Platform> platform. List; cl: : Platform: : get(&platform. List); … Marek Zając
… cl_context_properties cprops[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties) (platform. List[0])(), 0 }; cl: : Context context(CL_DEVICE_TYPE_ALL, cprops, NULL, &err); cl: : vector<cl: : Device> devices; devices = context. get. Info<CL_CONTEXT_DEVICES>(); … Marek Zając
… std: : ifstream file("func. cl"); std: : string prog(std: : istreambuf_iterator<char>(file), (std: : istreambuf_iterator<char>())); cl: : Program: : Sources source(1, std: : make_pair(prog. c_str(), prog. length() + 1)); cl: : Program program(context, source); err = program. build(devices, ""); cl: : Kernel kernel(program, "func", &err); … Marek Zając
… JUŻ PRAWIE, JESZCZE TYLKO … Marek Zając
… cl: : Buffer in(context, CL_MEM_READ_WRITE, sizeof(double) * 10000); cl: : Command. Queue queue(context, devices[0], 0, NULL); const size_t local_ws = 256; const size_t global_ws = ceil((double)local_ws / 10000); cl: : Event event; … Marek Zając
Marek Zając
… queue. enqueue. Write. Buffer(in, CL_TRUE, 0, sizeof(double) * 10000, tab); kernel. set. Arg(0, in); kernel. set. Arg(1, 10000); queue. enqueue. NDRange. Kernel(kernel, cl: : Null. Range, cl: : NDRange(global_ws), cl: : NDRange(local_ws), NULL, &event); event. wait(); queue. enqueue. Read. Buffer(in, CL_TRUE, 0, sizeof(double) * 10000, tab); Marek Zając
CZYŻBY KONIEC? Marek Zając
Marek Zając
__kernel void func(__global double* in, int n) { size_t id = get_global_id(0); in[id] *= 2. 5; } Marek Zając
TO MOŻE JAKIŚ TEST? „ŻĄDAMY DOWODÓW!” Marek Zając
__kernel void func(__global double* in, double x, int n) { size_t id = get_global_id(0); if(id < n) { in[id] *= x; in[id] += 10. 0 * x; in[id] = sqrt(in[i]); } } Marek Zając
K = 10000000 K * 200 Marek Zając
WYNIK TO… Marek Zając
Marek Zając CPU 11, 731 sek. GPU 6, 068 sek.
Marek Zając
Marek Zając
double => float Marek Zając CPU 12, 963 sek. GPU 2, 979 sek.
DZIĘKUJĘ ZA UWAGĘ ŹRÓDŁA OBRAZKÓW: 99% KRADZIONE Z INTERNETU, 1% WŁAŚNE Marek Zając
- Periodyzacja epok
- Instytut historii uo
- O troch grošoch text
- Povesť o troch prútoch
- Marleen de troch
- Ako vypocitat pomer troch cisel
- Marek lollok
- Marek scholz
- Marek szyjko
- Maciej jachymiak
- Marek jakab
- Giergiczny wne
- Marek bazan pwr
- Marek's disease
- Ing marek pavlik
- Fei tuke
- Marek łukaszewski
- Marek jakab
- Michal melich
- Ing marek pavlik phd
- Marek olszewski
- Arbol logika
- Marek ryński
- Marek szepski
- Marek bazan
- Marek perkowski
- Marek hrabal
- Geared turbofan engine disadvantages
- Marek karliner
- Marek gniadkowski
- The marek rule
- Marek bazan
- Marek sawczuk
- Marek krasuski
- Metodologia badań ekonomicznych
- Marek stejskal
- Arvuti komplekteerimine
- Marek paas
- Marek giergiczny
- Ophthalmology