Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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)
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.