CUDA Samples目录
生活随笔
收集整理的這篇文章主要介紹了
CUDA Samples目录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
- Simple Reference?
基礎CUDA示例,適用于初學者, 反映了運用CUDA和CUDA runtime APIs的一些基本概念. - Utilities Reference?
演示如何查詢設備能力和衡量GPU/CPU 帶寬的實例程序。 - Graphics Reference?
圖形化示例展現的是 CUDA, OpenGL, DirectX 之間的互通性 - Imaging Reference?
圖像處理,壓縮,和數據分析 - Finance Reference?
金融計算的并行處理 - Simulations Reference?
展現一些運用CUDA的模擬算法 - Advanced Reference?
用CUDA實現的一些先進的算法 - Cudalibraries Reference?
這類示例主要告訴我們該如何使用CUDA各種函數庫(NPP, CUBLAS, CUFFT,CUSPARSE, and CURAND).
Simple Reference
- asyncAPI?
使用CUDA stream和events重疊CPU和GPU的執行 - cdpSimplePrint - Simple Print (CUDA Dynamic Parallelism)?
展示了使用CUDA Dynamic Parallelism進行簡單輸出,需要3.5以上。依賴于CDP - cdpSimpleQuicksort - Simple Quicksort (CUDA DynamicParallelism)?
使用CUDA DynamicParallelism進行快速排序。也要求3.5以上 - clock - Clock?
如何使用clock函數去精確測量block的性能 - clock_nvrtc - Clock libNVRTC?
使用libNVRTC里的clock_nvtrc函數精確測量blokc性能 - cppIntegration - C++ Integration?
展示如何將CUDA程序整合進一個現成的C++應用中。CUDA的入口指針在主機端就是個函數,只有包含這個函數的時候才會用nvcc編譯。也展示了向量類型也可以被CUDA使用。 - cppOverload?
展示如何在GPU上重載C++函數 - cudaOpenMP?
如何使用cudaOpenMP API來寫多GPU程序 - fp16ScalarProduct - FP16 Scalar Product?
計算兩個FP16類型標量的乘積 - inlinePTX - Using Inline PTX?
展示在CUDA代碼中嵌入ptx代碼 - inlinePTX_nvrtc - Using Inline PTX with libNVRTC?
同上 - matrixMul - Matrix Multiplication (CUDA Runtime API Version)?
實現了矩陣乘法。為了清楚地展示CUDA編程的規則而不是致力于優化矩陣乘法。為了展示GPU矩陣乘的性能,也使用了CUBLAS這個庫去展示高性能的矩陣乘。 - matrixMul_nvrtc - Matrix Multiplication with libNVRTC?
同上 - matrixMulCUBLAS - Matrix Multiplication (CUBLAS)?
同上 - matrixMulDrv - Matrix Multiplication (CUDA Driver API Version)?
這個是使用驅動API實現的矩陣乘。 - simpleAssert?
如何使用Assert函數 - simpleAssert_nvrtc - simpleAssert with libNVRTC?
同上 - simpleAtomicIntrinsics - Simple Atomic Intrinsics?
原子操作 - simpleAtomicIntrinsics_nvrtc - Simple Atomic Intrinsics with libNVRTC?
同上 - simpleCallback - Simple CUDA Callbacks?
CUDA5.0的新功能。使用CPU回調CUDA流和事件的多線程異步計算。 - simpleCubemapTexture - Simple Cubemap Texture?
CUDA4.1的新功能,如何在代碼中使用cubemap Textures - simpleIPC?
展示進程間通訊(Inter Process Communication,IPC),需要Linux系統 - simpleLayeredTexture - Simple Layered Texture?
CUDA4.0支持層次紋理操作 - simpleMPI?
如何使用信息傳遞接口(Message Passing Interface,MPI) - simpleMultiCopy - Simple Multi Copy and Compute?
1.1以上,將計算和數據傳輸重疊。在2.0的機器上,在PCIe上任意方向的全速重疊都是可能的。這個例子展示了使用CUDA stream來重疊數據傳輸和Kernel執行。 - simpleMultiGPU - Simple Multi-GPU?
CUDA4.0對于CUDA上下文的管理和多GPU上的多線程并發 - simpleOccupancy?
通過利用配置程序啟動一個Kernel來說明CUDA占用計算器(occupancy calculator)和占用啟動配置器的使用(這特么都是啥。。。),并檢測不同配置下的使用率。 - simpleP2P - Simple Peer-to-Peer Transfers with Multi-GPU?
展示P2P的數據傳輸。也就是設備之間的數據傳輸。 - simplePitchLinearTexture - Pitch Linear Texture?
這翻譯成等步長紋理。 - simplePrintf?
如何在設備中使用輸出語句。在2.0之前,要用cuPrintf,之后可以直接printf。 - simpleSeparateCompilation - Simple Static GPU Device Library?
5.0特性,創建一個GPU靜態庫并在其他的Kernel中使用。這個例子展示了如何把一個(靜態庫中的)設備函數作為函數指針被調用。 - simpleStreams?
使用CUDA流重疊數據傳輸和Kernel執行。使用了頁鎖定內存 - simpleSurfaceWrite - Simple Surface Write?
2D表面引用 - simpleTemplates - Simple Templates?
就是講講模板怎么用,特別的,如何使用模板動態申請共享內存。 - simpleTemplates_nvrtc - Simple Templates with libNVRTC?
同上 - simpleTexture - Simple Texture?
使用紋理內存 - simpleTextureDrv - Simple Texture (Driver Version)?
使用驅動API操作紋理內存 - simpleVoteIntrinsics - Simple Vote Intrinsics?
如何使用Vote Intrinsics(不知道是啥) - simpleVoteIntrinsics_nvrtc - Simple Vote Intrinsics with libNVRTC?
同上并且要使用NVRTC 接口。 - simpleZeroCopy?
零拷貝內存的使用,利用零拷貝可以直接從地址中讀取而不用傳遞。 - systemWideAtomics - System wide Atomics?
原子操作 - template - Template?
一個零碎的模板工程,可以被用于創建一個粗大工程。 - UnifiedMemoryStreams - Unified Memory Streams?
使用統一內存的OpenMP和流。 - vectorAdd - Vector Addition?
運行時API實現的向量加法 - vectorAdd_nvrtc - Vector Addition with libNVRTC?
同上 - vectorAddDrv - Vector Addition Driver API?
同上
Utilities Reference
- bandwidthTest - Bandwidth Test?
檢測GPU之間內存復制的帶寬和PCIe帶寬。可以檢測各種帶寬。 - deviceQuery - Device Query?
設備信息。 - deviceQuery - Device Query?
使用驅動API檢測設備信息。 - p2pBandwidthLatencyTest - Peer-to-Peer Bandwidth Latency Test with Multi-GPUs?
用來檢測設備之間的數據計算時延和帶寬。使用P2P和沒使用都檢測了。 - topologyQuery - Topology Query?
多GPU下請求的拓補結構。
Graphics Reference
- bindlessTexture - Bindless Texture?
展示對cudaSurfaceObject, cudaTextureObject和MipMap的使用 - Mandelbrot?
展示Mandelbrot 或者 Julia集。同時也展示如何使用”double single”算法提高放大精度。 - marchingCubes - Marching Cubes Isosurfaces?
嗯。。。實在不知道是在講啥,只能直譯了。使用marching cubes算法從一堆數據中抽象出來幾何等值面。 - simpleD3D10 - Simple Direct3D10 (Vertex Array)?
展示CUDA和Direct3D10的互操作性,通過CUDA產生了定點數組使用Direct3D10給出幾何結構(?) - simpleD3D10RenderTarget - Simple Direct3D10 Render Target?
CUDA和Direct3D10中渲染目標(rendertargets)的互操作性。使用CUDA對渲染目標的位置產生一個可視化直方圖。 - simpleD3D10Texture - Simple D3D10 Texture?
展示CUDA和Direct3D10的紋理互操作性。 - simpleD3D11Texture - Simple D3D11 Texture?
吶,不出所料是展示CUDA和Direct3D11的紋理互操作性咯。 - simpleD3D9 - Simple Direct3D9 (Vertex Arrays)?
見條目4 - simpleD3D9Texture - Simple D3D9 Texture?
見條目6 - simpleGL - Simple OpenGL?
這是CUDA和OpenGL的互操作性。通過CUDA修改定點位置,然后用OpenGL渲染。 - simpleGLES - Simple OpenGLES?
展示CUDA和OpenGLES的數據交換。改變頂點位置并用OpenGL ES渲染。 - simpleGLES_EGLOutput - Simple OpenGLES EGLOutput?
展示CUDA和OpenGLES的數據交換。改變頂點位置并用OpenGL ES渲染。并展示使用EGLOutput機制和DRM庫如何直接渲染顯示。(然后顯示在屏幕上) - simpleGLES_screen - Simple OpenGLES on Screen?
展示CUDA和OpenGLES的數據交換。改變頂點位置并用OpenGL ES渲染。 - simpleTexture3D - Simple Texture 3D?
使用3維紋理 - SLID3D10Texture - SLI D3D10 Texture?
展示帶有Direct3D10紋理的SLI與CUDA的互操作性。創建了一個從CUDAKernel寫入的D3D10紋理。之后Direct3D在屏幕上渲染了結果 - volumeFiltering - Volumetric Filtering with 3D Textures and Surface Writes?
使用3D紋理和3D表面寫進行3D體積過濾 - volumeRender - Volume Rendering with 3D Textures?
使用3D紋理進行基礎的體積渲染
Imaging Reference
暫略
Finance Reference
暫略
Simulations Reference
- fluidsD3D9 - Fluids (Direct3D Version)?
利用CUDA和CUFFT進行流體模擬,利用Direct3D 9渲染。 - fluidsGL - Fluids (OpenGL Version)?
利用CUDA和CUFFT進行流體模擬,利用OpenGL渲染。 - fluidsGLES - Fluids (OpenGLES Version)?
利用CUDA和CUFFT進行流體模擬,利用OpenGL渲染。 - nbody - CUDA N-Body Simulation?
模擬了N體問題(對的,包括三體)。通過參數可以控制N的大小,并且能夠控制使用多少GPU設備。體的位置和速度使用零拷貝內存存儲,對于設備數量少于4和有大量體的情況,帶寬不再是運行瓶頸我們可以實現大規模的數據。 - nbody_opengles - CUDA N-Body Simulation with GLES?
這個模擬不提供用戶交互。 - nbody_screen - CUDA N-Body Simulation on Screen?
在屏幕上模擬? - oceanFFT - CUDA FFT Ocean Simulation?
使用CUFFT庫模擬海洋高度場(Ocean height field),并用OpenGL渲染。 - particles - Particles?
模擬大量粒子的相互作用。可以控制參數粒子的個數。這個粒子實現了一種統一數據結構,利用原子操作或者Thrust庫的快速基數排序。 - smokeParticles - Smoke Particles?
煙霧的光影體積模擬,用CUDA實現的一些先進的算法,使用半張角切片(half-angle slicing)技術。使用CUDA模擬,Thrust庫排序,OpenGL渲染。 - VFlockingD3D10?
這個是模擬什么大鳥的V型絨毛的(V-shaped flocks by big birds)。。。有GPU和CPU實現版本,使用g去開關這兩者。
Advanced Reference
- alignedTypes - Aligned Types?
展示對齊與非對齊結構體之間傳輸速度 - c++11_cuda - C++11 CUDA?
展示CUDA對C++11特性的支持。掃描了輸入文件,輸出x,y,z,w的。 - cdpAdvancedQuicksort - Advanced Quicksort (CUDA Dynamic Parallelism)?
實現了高級的快速排序,使用CUDA Dynamic Parallelism。 - cdpBezierTessellation - Bezier Line Tessellation (CUDA Dynamic Parallelism)?
嗯,就是,bezier tessellation of lines這個的實現。什么貝啟爾曲線啥的,中文和英文一樣看不到 (= = ) - cdpLUDecomposition - LU Decomposition (CUDA Dynamic Parallelism)?
LU分解是一種將非奇異矩陣進行三角分解的方法,然后CUDA模擬一下。 - cdpQuadtree - Quad Tree (CUDA Dynamic Parallelism)?
象限四分樹(哇哦。。。) - concurrentKernels - Concurrent Kernels?
stream中并行執行多個Kernel,并闡明如何處理CUDA stream之間的依賴。 - eigenvalues - Eigenvalues?
算特征值對于線性代數來說十分重要。這個例子實現了一個并行的二分算法,計算一個隨機大小的三對角矩陣的特征值。 - fastWalshTransform - Fast Walsh Transform?
實現快速沃爾什變換 - FDTD3d - CUDA C 3D FDTD?
該樣例在3D表面上應用有限差分時域進展模板。(是的你沒看錯) - FunctionPointers - Function Pointers?
教你怎么使用函數指針并且實現了索貝爾邊緣檢測。 - interval - Interval Computing?
實現區間計算。 - lineOfSight - Line of Sight?
視線算法的視線。給定一個高度圖和來自一些觀察點的射線,計算從觀察點沿著光線經過的所有的點。 - matrixMulDynlinkJIT - Matrix Multiplication (CUDA Driver API version with Dynamic Linking Version)?
使用CUDA驅動API再次實現矩陣乘法。展示了如何在運行時鏈接驅動并且即時編譯PTX代碼。主要也是為了展示CUDA的程序規則而不是優化程序。CUBLAS被用于這個計算。?
15.mergeSort - Merge Sort?
實現了歸并排序。雖然這種排序在大序列的排序上通常效率較低,但是在中等大小的鍵值對排序上是個好的選擇。 - newdelete - NewDelete?
展示在設備上動態new 和 delete空間和聲明虛函數。 - ptxjit - PTX Just-in-Time compilation?
使用驅動API從PTX即時編譯Kernel。并展示了運行時和驅動API互操作性的無縫銜接。對于CUDA5.5,這個例子展示如何使用cuLink*這樣的函數鏈接PTX。 - radixSortThrust - CUDA Radix Sort (Thrust Library)?
使用Thrust庫進行超級快而且高效并行的基數排序。既可以進行鍵值對排序也可以只進行鍵的排序。這個代碼使用了線程束同步,依賴于GPU上的線程都屬于線程束這個規則,所有的線程都同步地執行。當線程束內的線程訪問共享內存時,代碼中不用__syncthreads()。對于這種沒有競爭條件的操作,想要正確執行必須將共享內存定義為volatile。如果不定義,在缺少__syncthreads()時,編譯器會延遲將數據存到共享內存而是保存到寄存器中(編譯器的優化措施),這樣會導致錯誤。因此要主要這方面的應用。 - reduction - CUDA Parallel Reduction?
規約。這里有一些優化方法。 - scalarProd - Scalar Product?
標量相乘。 - scan - CUDA Parallel Prefix Sum (Scan)?
并行前綴和(也稱掃描算法)。 - segmentationTreeThrust - CUDA Segmentation Tree Thrust Library?
構造圖像分割樹的方法。基于Boruvka的MST算法。 - shfl_scan - CUDA Parallel Prefix Sum with Shuffle Intrinsics (SHFL_Scan)?
如何使用shuffle(線程束混洗)來進行掃描。 - simpleHyperQ?
流中多個Kernel并行,并且使用了HyperQ技術(這里竟然有教程) - sortingNetworks - CUDA Sorting Networks?
雙調排序奇偶合并排序。雖然這種排序在大序列的排序上通常效率較低,但是在中等大小的鍵值對排序上是個好的選擇。 - StreamPriorities - Stream Priorities?
如何使用流。 - threadFenceReduction?
使用thread Fence來進行規約。單步規約需要原子操作和_threadfence()指令 - threadMigration - CUDA Context Thread Management?
適合使用CUDA上下文管理和使用新的CUDA4.0的參數傳遞以及CUDA啟動API。CUDA上下文可以被分別創建并且獨立地和不同的線程連接。 - transpose - Matrix Transpose?
矩陣轉置。有一些操作用來優化。
Cudalibraries Reference
- batchCUBLAS?
教你怎么使用批量的CUBLAS的API提高程序性能。 - BiCGStab?
使用CUSPARSE和CUBLAS對有限的對稱和非對稱線性系統的穩定雙共軛梯度(Bi-Conjugate Gradient Stabilized)迭代方法。 - boxFilterNPP - Box Filter with NPP?
如何使用NPP盒式過濾器函數執行盒式過濾。 - cannyEdgeDetectorNPP - Canny Edge Detector NPP?
什么邊緣檢測過濾器。用這個可以把輸入圖片搞成灰度圖片。 - conjugateGradient - ConjugateGradient?
使用CUBLAS and CUSPARSE庫實現共軛梯度計算 - conjugateGradientPrecond - Preconditioned Conjugate Gradient?
使用CUBLAS and CUSPARSE庫實現前承條件共軛梯度計算 - conjugateGradientUM - ConjugateGradientUM?
使用統一內存和CUBLAS and CUSPARSE庫實現共軛梯度計算 - cuHook - CUDA Interception Library?
展示如何編譯和使用一個截距庫。這個庫要通過LD_PRELOAD加載。?
libcuhook.so.1 ./cuHook - cuSolverDn_LinearSolver - cuSolverDn Linear Solver?
實現cuSolverDN的LU, QR和Cholesky因式分解 - cuSolverRf - cuSolverRf Refactorization?
重新因子化。 - cuSolverSp_LinearSolver - cuSolverSp Linear Solver?
實現cuSolverSP的LU, QR和Cholesky因式分解 - cuSolverSp_LowlevelCholesky - cuSolverSp LowlevelCholesky Solver?
使用cuSolverSP底層API實現Cholesky因式分解 - cuSolverSp_LowlevelQR - cuSolverSp Lowlevel QR Solver?
使用cuSolverSP底層API實現QR因式分解 - FilterBorderControlNPP - Filter Border Control NPP?
如何在常見模式下使用NPP過濾器函數的邊緣版本,可以用來備份NPP的相同的無邊界版本函數的結果,也可以被用來開關不同原圖片邊緣的邊界控制,這些圖片邊緣依賴于被作為輸入的原圖片的部分。(是是是,你說得都對) - freeImageInteropNPP - FreeImage and NPP Interopability?
使用FreeImage庫 - histEqualizationNPP - Histogram Equalization with NPP?
如何使用NNP把圖片數據直方圖均值化 - jpegNPP - JPEG encode/decode and resize with NPP?
流水線處理圖片。首先一個JPEG圖片被哈弗曼編碼然后被離散余弦轉換且去量子化。不同區域被重新調整大小。最后反過來,重新量子化,正向離散余弦轉換再哈弗曼解碼。 - MC_EstimatePiInlineP - Monte Carlo Estimation of Pi(inline PRNG)?
使用蒙特卡羅方法模擬π(內聯PRNG),并使用NVIDIA CURAND庫。 - MC_EstimatePiInlineQ - Monte Carlo Estimation of Pi(inline QRNG)?
使用蒙特卡羅方法模擬π(內聯QRNG),并使用NVIDIA CURAND庫。 - MC_EstimatePiP - Monte Carlo Estimation of Pi (batch PRNG)?
使用蒙特卡羅方法模擬π(使用批量PRNG).),并使用NVIDIA CURAND庫。 - MC_EstimatePiQ - Monte Carlo Estimation of Pi (batch QRNG)?
使用蒙特卡羅方法模擬π(使用批量RRNG).),并使用NVIDIA CURAND庫。 - MC_SingleAsianOptionP - Monte Carlo Single Asian Option?
使用蒙特卡羅方法模擬簡單亞式期權,并使用NVIDIA CURAND庫。 - MersenneTwisterGP11213?
模擬梅森旋轉算法,使用cuRAND產生隨機數 - nvgraph_Pagerank - NVGRAPH Page Rank?
使用NVGRAPH庫進行Page Rank - nvgraph_SemiRingSpmv - NVGRAPH Semi-Ring SpMV?
使用NVGRAPH庫進行半環向量乘法。 - nvgraph_SSSP - NVGRAPH Single Source Shortest Path?
使用NVGRAPH庫計算單源最短路徑 - randomFog - Random Fog?
演示使用CURAND產生偽隨機和準隨機算法 - simpleCUBLAS - Simple CUBLAS?
演示怎么使用最新的CUBLAS庫 - simpleCUBLASXT - Simple CUBLAS XT?
CUBLAS-XT庫使用 - simpleCUFFT - Simple CUFFT?
使用CUFFT計算帶有過濾的信號的1維卷積,通過將其轉換入頻域(frequency domain),使其二者相乘,并重新傳回時域。CUFFT計劃是產生于簡單和高級API的需求的。 - simpleCUFFT_2d_MGPU - SimpleCUFFT_2d_MGPU?
這個是用CUFFT計算二維卷積。,并且是多個GPU。 - simpleCUFFT_callback - Simple CUFFT Callbacks?
這個也是 使用CUFFT計算帶有過濾的信號的1維卷積,通過將其轉換入頻域(frequency domain),使其二者相乘,并重新傳回時域。不同之處在于,多個步驟是由用戶提供的一個CUFFT回調函數實現而不是一個分離的Kernel調用。 - simpleCUFFT_MGPU - Simple CUFFT_MGPU?
多GPU的一維卷積。 - simpleDevLibCUBLAS - simpleDevLibCUBLAS GPU Device API Library Functions (CUDA Dynamic Parallelism)?
該示例實現了一個簡單的CUBLAS函數調用,調用運行CUBLAS函數的GPU設備API庫
總結
以上是生活随笔為你收集整理的CUDA Samples目录的全部內容,希望文章能夠幫你解決所遇到的問題。