TROCH HISTORII Marek Zajc Marek Zajc Marek Zajc

  • Slides: 39
Download presentation

TROCHĘ HISTORII Marek Zając

TROCHĘ HISTORII Marek Zając

Marek Zając

Marek Zając

Marek Zając

Marek Zając

PO CO UŻYWAĆ OPENCL? 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

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

Intel Core i 5 2550 k AMD Radeon HD 7870 4 rdzenie 1280 rdzeni Marek Zając

Marek Zając

Marek Zając

Marek Zając

Marek Zając

DLACZEGO NIE UŻYWAĆ OPENCL? Marek Zając

DLACZEGO NIE UŻYWAĆ OPENCL? Marek Zając

Marek Zając

Marek Zając

CZEGO NAM TRZEBA? Marek Zając

CZEGO NAM TRZEBA? Marek Zając

Marek Zając

Marek Zając

Marek Zając

Marek Zając

CZAS NA NAJLEPSZE! Marek Zając

CZAS NA NAJLEPSZE! Marek Zając

KOD! Marek Zając

KOD! Marek Zając

TRADYCYJNE PODEJŚCIE Marek Zając

TRADYCYJNE PODEJŚCIE Marek Zając

double* tab = new double[10000]; //prepare array. . . //. . . for(int i

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

OPENCL Marek Zając

double* tab = new double[10000]; //prepare array. . . //. . . … Marek

double* tab = new double[10000]; //prepare array. . . //. . . … Marek Zając

… cl_int err; cl: : vector<cl: : Platform> platform. List; cl: : Platform: :

… 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

… 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: :

… 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

… JUŻ PRAWIE, JESZCZE TYLKO … Marek Zając

… cl: : Buffer in(context, CL_MEM_READ_WRITE, sizeof(double) * 10000); cl: : Command. Queue queue(context,

… 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

Marek Zając

… queue. enqueue. Write. Buffer(in, CL_TRUE, 0, sizeof(double) * 10000, tab); kernel. set. Arg(0,

… 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

CZYŻBY KONIEC? Marek Zając

Marek Zając

Marek Zając

__kernel void func(__global double* in, int n) { size_t id = get_global_id(0); in[id] *=

__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

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);

__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

K = 10000000 K * 200 Marek Zając

WYNIK TO… Marek Zając

WYNIK TO… Marek Zając

Marek Zając CPU 11, 731 sek. GPU 6, 068 sek.

Marek Zając CPU 11, 731 sek. GPU 6, 068 sek.

Marek Zając

Marek Zając

Marek Zając

Marek Zając

double => float Marek Zając CPU 12, 963 sek. GPU 2, 979 sek.

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

DZIĘKUJĘ ZA UWAGĘ ŹRÓDŁA OBRAZKÓW: 99% KRADZIONE Z INTERNETU, 1% WŁAŚNE Marek Zając