GPGPU labor X. Monte Carlo módszerek. Kezdeti teendők Tantárgy honlapja, Monte Carlo módszerek A labor kiindulási alapjának letöltése (lab10_base.zip),

Slides:



Advertisements
Hasonló előadás
A kétdimenziós tömbök Páll Boglárka. Ismétlés: Az egydimenziós tömbök  Meghatározás: A tömb egy olyan összetett adatszerkezet amely több rögzített számú,
Advertisements

 Folyékony anyagok  Füstszerű jelenségek  Felhők  Festékek.
3D képszintézis fizikai alapmodellje
Bevezetés a tárgyakhoz Tárgyak  Objects are the containers for values of a specified type  Objects are either signals, variables or constants  Once.
FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák.
Szécsi László. June 2010 DirectX SDK Visual Studio 2010.
 Lineáris egyenlet  algebrai egyenlet  konstansok és első fokú ismeretlenek  pl.: egyenes egyenlete  Lineáris egyenletrendszer  lineáris egyenletek.
 Adat- és feladat párhuzamos modell  Az ISO C99 szabvány részhalmaza  párhuzamos kiegészítésekkel  Numerikus műveletek az IEEE754 alapján  Beágyazott.
 Bővítmény rendszer  Az OpenGL bővítményeihez hasonló  A specifikiáció természetes fejlődése ▪ Gyártó specifikus bővítmény ▪ Általános bővítmények.
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
 Alapja a véletlen minták kiértékelése  Matematikai rendszerek  Fizikai szimuláció  Sok szabadság fokú csatolt rendszerek  Folyadékok, sejt struktúrák,
GPGPU labor I. OpenGL, Cg.
 Fény fotonok szimulációja  Nem változtatja meg a frekvenciát ütközéskor  Homogén és inhomogén közegben.
Az IBM SPSS Statistics programrendszer Gazdaságinformatikus MsC.
Socket programozás Példák
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
Borland C/C++ mintapéldák
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
Mérnöki objektumok leírása és elemzése virtuális terekben c. tantárgy Budapesti Műszaki Főiskola Neumann János Informatikai Kar Intelligens Mérnöki Rendszerek.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
Oracle – ORDMS lehetőségek UDT:- objektum típusok - kollekció típusok SQL> CREATE TYPE SZEMELY AS OBJECT ( 2 NEV VARCHAR2(20), 3 TEL VARCHAR2(14)); SQL>
VFP xBase adatkezelés - munkaterületek - DML - DDL - navigáció - eljárások, függvények - vezérlési szerkezetek - változók - képernyő IO - mintaprogram.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
A megértés körei Binzberger Viktor Budapest Műszaki és Gazdaságtudományi Egyetem Filozófia és Tudománytörténet Tanszék.
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
Multimédiás programok készítése Macromedia Director fejlesztői környezetben 4. előadás Készítette: Kosztyán Zsolt
Edge Transport Routing and AV/AS Enterprise Network External SMTP servers Phone system (PBX or VOIP) Client Access Client connectivity Web services.
Prog1, C a gyakorlatban Magasszintű programozási nyelvek 1 mérnök informatikus BSc előadás Bátfai Norbert egyetemi tanársegéd
Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Windows NT driverek fejlesztése: Virtuális.
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Biometria I. SANB_BI1019 Pearson-féle Chi-négyzet (χ2) teszt Molnár Péter Állattani Tanszék
Null Hypothesis (H 0 ) is true He truly is not guilty Alternative Hypothesis (H 1 ) is true He truly is guilty Accept Null Hypothesis Acquittal Right decision.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Hasznos ismeretek Hogyan bővítsük ismereteinket AVRDUDEflags -E noreset.
2. Házi feladat 1. feladat megoldása
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Motor IIII. PhysX utáni rendberakás Vezérlés Szécsi László.
Motor II. Env map Spotlight Szécsi László. Letöltés /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.):
PhysX integráció Szécsi László. Letöltés diák: bagira.iit.bme.hu/~szecsi/GraphGame //l11-physx.ppt modell: bagira.iit.bme.hu/~szecsi/GraphGame //pickup.zip.
Transzformációk, textúrák, árnyalás Szécsi László.
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
OIS. Kezdeti teendők Letöltés: OgreLabControllersBase.zip Kicsomagol, betölt:.sln Additional include és library path beállítása Working directory beállítása.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
Geometry instancing Szécsi László. copy-paste-rename gg009-Gui folder vcxproj, filters átnevezés solution/add existing project rename project working.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
Textúrázás Szécsi László. giraffe.jpg letöltése SolutionDir/Media folderbe.
 Map  Reduce  Scan  Histogram  Compact const size_t dataSize = 1024; cl_kernel mapKernel = cl.createKernel(clProgram, "map"); float* hData = new.
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor XII. Tomográfiás rekonstrukció. Kezdeti teendők Tantárgy honlapja, Monte Carlo szimuláció A labor kiindulási alapjának letöltése (lab12_base.zip),
GPGPU labor III. Iteratív algoritmusok. Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip),
GPGPU labor IX. Lineáris egyenletrendszerek megoldása.
GPGPU Labor 15.. Párhuzamos primitívek Map Reduce Scan Histogram Compact.
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
 OpenCL platform  Számító eszközök  OpenCL kontextusok  Parancs sorok  Szinkronizáció  Memória objektumok  OpenCL programok  OpenCL függvények.
ELTE-IK, Számítógépes grafika 2./haladó 2. gyakorlat Klár Gergely.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Google Summer of Code 2015 OpenCL image support for the r600g driver.
GPGPU – CUDA 1..
Monte Carlo módszerek.
Lineáris egyenletrendszerek megoldása
GPGPU – CUDA 2..
Systems Hardware Business challenge
Függvénysablonok használata
Unit tesztelés Swift-ben
Előadás másolata:

GPGPU labor X. Monte Carlo módszerek

Kezdeti teendők Tantárgy honlapja, Monte Carlo módszerek A labor kiindulási alapjának letöltése (lab10_base.zip), kitömörítés a GPGPU\Labs könyvtárba

Véletlen szám generátorok Implementáljunk egy álvéletlen generátort! Implementáljuk egy alacsony diszkrepanciájú sorozatot! Vizsgáljuk meg a választott generátorokat 1D egyenletesség szempontjából! Készítsünk 1D Monte Carlo integrátort! Készítsünk 3D Monte Carlo integrátort!

Lineáris Kongruencia Generátor (programs.cl) // Linear Congruential Generator uint stepLCG(uint *z, uint A, uint C){ return (*z) = (A * (*z) + C); } __kernel void randomLCG(const int randomNumbers, __global float* randomsSeed, __global float* randomGPU){ int id = get_global_id(0); int maxID = get_global_size(0); uint rng = randomsSeed[id]; for(int i=0; i < randomNumbers; ++i){ randomGPU[id + i * maxID] = (float)stepLCG(&rng, , UL) / 0xffffffff; }

Késleltetett Fibonacci Generátor (programs.cl) // Lagged Fibonacci Generator uint stepLFG(uint *z, __global uint *znmk, uint A, uint C){ return (*znmk) = (*z) = (A * (*z) + C) + (*znmk); } __kernel void randomLFG(const int randomNumbers, __global float* randomsSeed, const int randomStateSize, __global uint* randomState, __global float* randomGPU){ int id = get_global_id(0); int maxID = get_global_size(0); // bootstrap uint rng = randomsSeed[id]; for(int i=0; i < randomStateSize; ++i){ randomState[id + i * maxID] = stepLCG(&rng, , UL); } // Lagged Fibonacci Generator int nmkIndex = 0; for(int i=0; i < randomNumbers; ++i){ randomGPU[id + i * maxID] = (float)stepLFG(&rng, &randomState[nmkIndex], , UL) / 0xffffffff; nmkIndex = (nmkIndex + 1) % randomStateSize; }

Kombinált Tausworthe Generátor (programs.cl) // Combined Tausworthe Generator uint stepCTG(uint *z, uint S1, uint S2, uint S3, uint M){ uint b=((((*z) >S2); return (*z) = ((((*z)&M)<<S3)^b); } __kernel void randomCTG(const int randomNumbers, __global float* randomsSeed, __global float* randomGPU){ int id = get_global_id(0); int maxID = get_global_size(0); uint rng = randomsSeed[id]; for(int i=0; i < randomNumbers; ++i){ randomGPU[id + i * maxID] = (float)(stepCTG(&rng, 13, 19, 12, UL)^ stepCTG(&rng, 2, 25, 4, UL)) / 0xffffffff; }

Hibrid Generátor (programs.cl) // Hybrid RNG float stepHybrid(uint* rng1, uint* rng2, uint* rng3, uint* rng4){ return e-10 * ( stepCTG(rng1, 13, 19, 12, UL) ^ stepCTG(rng2, 2, 25, 4, UL) ^ stepCTG(rng3, 3, 11, 17, UL) ^ stepLCG(rng4, , UL) ); } __kernel void hybridRNG(const int randomNumbers, __global float* randomsSeed, __global float* randomGPU){ int id = get_global_id(0); int maxID = get_global_size(0); uint rng1 = randomsSeed[id * 4 + 0]; uint rng2 = randomsSeed[id * 4 + 1]; uint rng3 = randomsSeed[id * 4 + 2]; uint rng4 = randomsSeed[id * 4 + 3]; for(int i = 0; i < randomNumbers; ++i){ randomGPU[id + i * maxID] = (float)stepHybrid(&rng1, &rng2, &rng3, &rng4); }

Mersenne Twister mersenneTwister.cl – A bin könyvtárban van az OpenCL program

Halton sorozat (programs.cl) // Halton sequence float stepHalton(float *value, float inv_base){ float r = (*value) ; if(inv_base < r) { (*value) += inv_base; } else { float h = inv_base, hh; do{ hh = h; h *= inv_base; } while (h >= r); (*value) += hh + h - 1.0; } return (*value); } void seedHalton(ulong i, int base, float* inv_base, float* value){ float f = (*inv_base) = 1.0/base; (*value) = 0.0; while( i > 0){ (*value) += f * (float)(i % base); i /= base; f *= (*inv_base); } __kernel void haltonSequence(const int randomNumbers, const int base, __global float* randomGPU){ int id = get_global_id(0); int maxID = get_global_size(0); float inv_base = 0.0; float rng = 0.0; seedHalton(id * randomNumbers, base, &inv_base, &rng); for(int i=0; i < randomNumbers; ++i){ randomGPU[id + i * maxID] = stepHalton(&rng, inv_base); }

1D egyenletességi teszt testUniform1DArray – size_t maxWorkGroupSize A generáláshoz használt munkacsoport méret – int randomNums A munka elemek által generált véletlenek száma – cl_mem randomsGPU A memória objektum ahol a véletlen számok vannak

1D egyenletességi teszt void testUniform1DArray(size_t maxWorkGroupSize, int randomNums, cl_mem randomsGPU){ cl_kernel testUniform1DKernel = createKernel(program, "testUniform1D"); size_t workGroupSize = 0; CL_SAFE_CALL( clGetKernelWorkGroupInfo(testUniform1DKernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(workGroupSize), &workGroupSize, NULL) ); workGroupSize = workGroupSize > maxWorkGroupSize ? maxWorkGroupSize : workGroupSize; const int bucketNum = 16; int* buckets = new int[bucketNum * workGroupSize]; cl_mem bucketsGPU = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(int) * workGroupSize * bucketNum, NULL, NULL); CL_SAFE_CALL( clSetKernelArg(testUniform1DKernel, 0, sizeof(int), &randomNums) ); CL_SAFE_CALL( clSetKernelArg(testUniform1DKernel, 1, sizeof(cl_mem), &randomsGPU) ); CL_SAFE_CALL( clSetKernelArg(testUniform1DKernel, 2, sizeof(int), &bucketNum) ); CL_SAFE_CALL( clSetKernelArg(testUniform1DKernel, 3, sizeof(cl_mem), &bucketsGPU) ); CL_SAFE_CALL( clEnqueueNDRangeKernel(commands, testUniform1DKernel, 1, NULL, &workGroupSize, NULL, 0, NULL, NULL) ); clFinish(commands); CL_SAFE_CALL( clEnqueueReadBuffer(commands, bucketsGPU, CL_TRUE, 0, sizeof(int) * workGroupSize * bucketNum, buckets, 0, NULL, NULL) ); for(int i = 0; i < bucketNum; ++i){ float e = 0; float e2 = 0; for(int j = 0; j < workGroupSize; ++j){ e += buckets[j + i * workGroupSize]; e2 += buckets[j + i * workGroupSize] * buckets[j + i * workGroupSize]; } e = e / workGroupSize; e2 = e2 / workGroupSize; std::cout << i << " e: " << e << " d: " << sqrt(e2 - (e*e)) << std::endl; } std::cout << std::endl; clReleaseKernel(testUniform1DKernel); delete buckets; }

1D egyenletességi teszt // 1D uniformity test // TODO // Generate a quantized histogram // randomNums = number of randoms per thread // randoms = array of random numbers // bucketNum = number of histogram buckets // buckets = array of histogram buckets __kernel void testUniform1D(const int randomNums, __global float* randoms, const int bucketNum, __global int* buckets){ }

1D Monte Carlo integrálás (programs.cl) // 1D Monte-Carlo integral // TODO // Implement a Monte Carlo integrator: sin(x) ; x := [0:PI/2] // sampleNumber = number of samples per thread // seed = float4 seed array for the random number generator // integral = partial integral #define M_PIP f __kernel void mcInt1D(const int sampleNumber, __global float4* seed, __global float* integral){ }

Monte Carlo integrálás Próbáljuk ki más függvényekre is! Írjunk függvényt amely kiszámítja egy r=0.5 sugarú gömb térfogatát! – Próbáljuk ki álvéletlen generátorral! – Nézzük meg az eredményt egy Halton sorozat álltal generált mintákkal! – Vizsgáljuk meg mi változik ha dimenziónkét külön sorozatot használunk (pl. 2, 3, 5)

Sztochasztikus differenciál egyenlet Black-Scholes egyenlet – Részvény ár változás – S t : a részvény t időpontbeli ára – :a sztochasztikus folyamat átlagának változása (stochastic drift) – : az ár változási valószínűsége (volatility) – :Wiener féle sztochasztikus folyamat (Brown mozgás)

Sztochasztikus differenciál egyenlet Monte Carlo szimuláció – Egymástól független trajektóriák számítása – Várható érték számítás – Szórás számítás

Sztochasztikus differenciál egyenlet