Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

CUDA – OpenGL.

Hasonló előadás


Az előadások a következő témára: "CUDA – OpenGL."— Előadás másolata:

1 CUDA – OpenGL

2 CUDA textúra támogatás
Textúra memória 2D lokalitásra optimalizált elérés A GPU textúrázó egységének használata Textúra szűrés Bővített memória címzés Konstans késleltetés Két támogatott API Textúra referencia Textúra objektum

3 CUDA textúra referencia
Egyszerű, limitált funkciók Globális textúra változó, fordítási időben DataType: adat típus Type: textúra típus ReadMode: olvasási mód texture<DataType, Type, ReadMode> texRef;

4 CUDA textúra referencia
Változtatható paraméterek struct textureReference { int normalized; // Normalizált koordináták enum cudaTextureFilterMode filterMode; // Szűrési mód enum cudaTextureAddressMode addressMode[3]; // Címzési mód struct cudaChannelFormatDesc channelDesc; // Texel formátum int sRGB; unsigned int maxAnisotropy; enum cudaTextureFilterMode mipmapFilterMode; float mipmapLevelBias; float minMipmapLevelClamp; float maxMipmapLevelClamp; } struct cudaChannelFormatDesc { int x, y, z, w; enum cudaChannelFormatKind f; }

5 Textúra olvasás kernel kódból
Szűrt texel olvasás Direkt texel olvasás template<class T> T tex1D(cudaTextureObject_t texObj, float x); template<class T> T tex2D(cudaTextureObject_t texObj, float x, float y); template<class T> T tex3D(cudaTextureObject_t texObj, float x, float y, float z); template<class T> T texCubemap(cudaTextureObject_t texObj, float x, float y, float z); template<class T> T tex2Dgather(cudaTextureObject_t texObj, float x, float y, int comp = 0); template<class T> T tex1Dfetch(cudaTextureObject_t texObj, int x); template<class T> tex2DLod(cudaTextureObject_t texObj, float x, float y, float level); template<class T> T tex3DLod(cudaTextureObject_t texObj, float x, float y, float z, float level);

6 CUDA textúra objektum Rugalmas textúra definíció
struct cudaTextureDesc { enum cudaTextureAddressMode addressMode[3]; enum cudaTextureFilterMode filterMode; enum cudaTextureReadMode readMode; int sRGB; int normalizedCoords; unsigned int maxAnisotropy; enum cudaTextureFilterMode mipmapFilterMode; float mipmapLevelBias; float minMipmapLevelClamp; float maxMipmapLevelClamp; };

7 CUDA textúra objektum Rugalmas erőforrás definíció
struct cudaResourceDesc { cudaArray_t array; struct cudaChannelFormatDesc desc; void* devPtr; size_t height; cudaMipmappedArray_t mipmap; size_t pitchInBytes; enumcudaResourceType resType; size_t sizeInBytes; size_t width; };

8 // Allocate CUDA array in device memory
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat); cudaArray* cuArray; cudaMallocArray(&cuArray, &channelDesc, width, height); // Copy to device memory some data located at address h_data in host memory cudaMemcpyToArray(cuArray, 0, 0, h_data, size, cudaMemcpyHostToDevice); // Specify texture struct cudaResourceDesc resDesc; memset(&resDesc, 0, sizeof(resDesc)); resDesc.resType = cudaResourceTypeArray; resDesc.res.array.array = cuArray; // Specify texture object parameters struct cudaTextureDesc texDesc; memset(&texDesc, 0, sizeof(texDesc)); texDesc.addressMode[0] = cudaAddressModeWrap; texDesc.addressMode[1] = cudaAddressModeWrap; texDesc.filterMode = cudaFilterModeLinear; texDesc.readMode = cudaReadModeElementType; texDesc.normalizedCoords = 1; // Create texture object cudaTextureObject_t texObj = 0; cudaCreateTextureObject(&texObj, &resDesc, &texDesc, NULL);

9 CUDA - OpenGL Az OpenGL erőforrások megoszthatók CUDA inicializáció
Az objektumokat az OpenGL hozza létre A megosztás során a pillanatnyi paraméterek másolódnak Az objektumok használata kizárólagos CUDA inicializáció cudaError_t cudaGLSetGLDevice(int device);

10 CUDA - OpenGL Buffer objektum regisztráció
Textúra objektum regisztráció cudaError_t cudaGraphicsGLRegisterBuffer( cudaGraphicsResource** resource, GLuint buffer, unsigned int flags) cudaError_t cudaGraphicsGLRegisterImage( cudaGraphicsResource** resource, GLuint image, GLenum target, unsigned int flags)

11 CUDA - OpenGL Erőforrás átvétel Átvett erőforrás elérése
cudaError_t cudaGraphicsMapResources( int count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0) cudaError_t cudaGraphicsResourceGetMappedPointer( void** devPtr, size_t* size, cudaGraphicsResource_t resource)

12 CUDA - OpenGL Átvett erőforrás elérése Erőforrás regisztráció törlése
cudaError_t cudaGraphicsUnmapResources( int count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0) cudaError_t cudaGraphicsUnregisterResource( cudaGraphicsResource_t resource)


Letölteni ppt "CUDA – OpenGL."

Hasonló előadás


Google Hirdetések