Simple Reference Basic CUDA samples for beginners that illustrate key concepts with using CUDA and CUDA runtime APIs.
Utilities Reference Utility samples that demonstrate how to query device capabilities and measure GPU/ CPU bandwidth.
Graphics Reference Graphical samples that demonstrate interoperability between CUDA and OpenGL or DirectX.
Imaging Reference Samples that demonstrate image processing, compression, and data analysis.
Finance Reference Samples that demonstrate parallel algorithms for financial computing.
Simulations Reference Samples that illustrate a number of simulation algorithms implemented with CUDA.
Advanced Reference Samples that illustrate advanced algorithms implemented with CUDA.
Cudalibraries Reference Samples that illustrate how to use CUDA platform libraries (NPP, cuBLAS, cuFFT, cuSPARSE, and cuRAND)
简单参考用于初学者的基本CUDA示例,用于说明使用CUDA和CUDA运行时API的关键概念。
实用程序参考实用程序示例演示如何查询设备功能和测量GPU / CPU带宽。
图形参考图形示例,演示CUDA与OpenGL或DirectX之间的互操作性。
成像参考样品,用于演示图像处理,压缩和数据分析。
财务参考示例演示金融计算的并行算法。
模拟参考样本说明了使用CUDA实现的许多模拟算法。
高级参考样本,说明使用CUDA实现的高级算法。
Cudalibraries参考示例说明如何使用CUDA平台库(NPP,cuBLAS,cuFFT,cuSPARSE和cuRAND)
----------------------------------------------------------------1
asyncAPI–此示例使用CUDA流和事件来重叠CPU和GPU上的执行
cdpSimplePrint–此示例演示了使用CUDA Dynamic Parallelism实现此示例依赖于系统上要存在或运行的其他应用程序或库。的简单printf。
此示例需要具有3.5或更高计算能力的设备。
如果系统上没有这些依赖项,则不会安装该示例。 如果这些依赖项可用但未安装,则示例将在构建时自行放弃
cdpSimpleQuicksort–此示例演示了使用CUDA Dynamic Parallelism实现的简单快速排序。
clock–此示例显示如何使用时钟函数准确地测量内核的线程块性能。
clock_nvrtc–此示例显示如何使用libNVRTC使用时钟函数来准确地测量内核的线程块性能。
cppIntegration–这个例子演示了如何将CUDA集成到现有的C ++应用程序中,即主机端的CUDA入口点
只是一个从C ++代码调用的函数,只有包含该函数的文件是用nvcc编译的。 它还演示了可以从cpp使用矢量类型
cppOverload–此示例演示如何在GPU上使用C ++函数重载
cudaOpenMP --此示例演示如何使用OpenMP API为多个GPU编写应用程序。
cudaTensorCoreGemm --CUDA样本使用CUDA 9中引入的Warp Matrix Multiply and Accumulate(WMMA)API演示GEMM计算。
该示例演示了使用采用Volta芯片系列中的Tensor Cores的新CUDA WMMA API,以实现更快的矩阵运算。
除此之外,它还演示了如何使用新的CUDA函数属性cudaFuncAttributeMaxDynamicSharedMemorySize,
它允许应用程序保留比默认情况下可用的扩展数量更多的共享内存。
fp16ScalarProduct --计算FP16数的两个向量的标量积
inlinePTX --一个简单的测试应用程序,演示了一个新的CUDA 4.0在CUDA内核中嵌入PTX的能力
inlinePTX_nvrtc --一个简单的测试应用程序,演示了一种新的CUDA 4.0在CUDA内核中嵌入PTX的能力。
matrixMul --该示例实现了矩阵乘法,该矩阵乘法利用共享内存来确保数据重用,矩阵乘法使用平铺方法完成。
为了清楚地阐述各种CUDA编程原理而编写它,而不是为了为矩阵乘法提供最高性能的通用内核。
matrixMul_nvrtc–此示例实现了矩阵乘法,与编程指南的第6章完全相同。 为了清楚地阐述各种CUDA编程原理而编写它,
而不是为了为矩阵乘法提供最高性能的通用内核。 为了说明矩阵乘法的GPU性能,
该示例还展示了如何使用CUBLAS的新CUDA 4.0接口来演示矩阵乘法的高性能性能
matrixMulCUBLAS–该示例实现了编程指南第3章中的矩阵乘法。 为了说明矩阵乘法的GPU性能,
该示例还展示了如何使用CUBLAS的新CUDA 4.0接口来演示矩阵乘法的高性能性能。
matrixMulDrv --此示例实现矩阵乘法并使用新的CUDA 4.0内核启动驱动程序API。
为了清楚地阐述各种CUDA编程原理而编写它,而不是为了为矩阵乘法提供最高性能的通用内核。 CUBLAS提供高性能矩阵乘法。
simpleAssert --此CUDA Runtime API示例是一个非常基本的示例,它实现了如何在设备代码中使用assert函数。需要Compute Capability 2.0
simpleAssert_nvrtc–此CUDA Runtime API示例是一个非常基本的示例,它实现了如何在设备代码中使用assert函数。 需要Compute Capability 2.0。
simpleAtomicIntrinsics --全局内存原子指令的简单演示。 要求计算能力2.0或更高
simpleAtomicIntrinsics_nvrtc–全局内存原子指令的简单演示。此示例使用NVRTC进行运行时编译
simpleCallback --此示例使用CUDA 5.0引入的CUDA流和事件的新CPU回调实现多线程异构计算工作负载
simpleCooperativeGroups --此示例是一个简单的代码,说明了线程块内协作组的基本用法
simpleCubemapTexture --演示如何使用新的CUDA 4.1功能支持CUDA C中的立方体贴图纹理的简单示例
simpleIPC --此CUDA运行时API示例是一个非常基本的示例,它演示了每个GPU用于计算的一个进程的进程间通信。
需要Compute Capability 2.0或更高版本以及Linux操作系统
simpleLayeredTexture --这个简单的例子演示了如何使用新的CUDA 4.0功能来支持CUDA C中的分层纹理
simpleMPI --演示如何将MPI与CUDA结合使用的简单示例
simpleMultiCopy --在具有Compute Capability 1.1的GPU中支持,可以从主机系统重叠计算与一个memcopy。
对于具有Compute Capability 2.0的Quadro和Tesla GPU,可以在全速的任一方向上进行第二次重叠复制操作(PCI-e是对称的)。
此示例说明了CUDA流的使用,以实现内核执行与数据副本与设备之间的重叠。
simpleMultiGPU --此应用程序演示了如何使用新的CUDA 4.0 API进行CUDA上下文管理和多线程访问,以在多GPU上运行CUDA内核。
simpleOccupancy --此示例通过使用启动配置程序启动内核来演示CUDA占用计算器和基于占用的启动配置程序API的基本用法,并根据手动配置的启动测量利用率差异。
simpleP2P --此应用程序演示了支持多GPU之间的Peer-To-Peer(P2P)副本,PeerTo-Peer(P2P)寻址和统一虚拟内存寻址(UVA)的CUDA API。
通常,两个相同的GPU之间支持P2P,但有一些例外,例如某些特斯拉和Quadro GPU。
simplePitchLinearTexture --使用间距线性纹理
simplePrintf --此CUDA Runtime API示例是一个非常基本的示例,它实现了如何在设备代码中使用printf函数。
具体来说,对于计算能力小于2.0的设备,调用函数cuPrintf; 否则,printf可以直接使用。
simpleSeparateCompilation --此示例演示了CUDA 5.0功能,即创建GPU设备静态库并在另一个CUDA内核中使用它的功能。
此示例演示如何将GPU设备功能(来自GPU设备静态库)作为要调用的函数指针传递。 此示例需要具有2.0或更高计算能力的设备。
simpleStreams --此示例使用CUDA流将内核执行与主机与GPU设备之间的内存副本重叠。
此示例使用新的CUDA 4.0功能,该功能支持固定通用主机内存。 要求计算能力2.0或更高
simpleSurfaceWrite --演示2D表面参考(Write-to-Texture)使用的简单示例
simpleTemplates --此示例是模板项目的模板化版本。 它还说明了如何正确地模拟动态分配的共享内存数组。
simpleTemplates_nvrtc–此示例是模板项目的模板化版本。 它还说明了如何正确地模拟动态分配的共享内存数组
simpleTexture --演示在CUDA中使用Textures的简单示例
simpleTextureDrv --演示在CUDA中使用Textures的简单示例。 此示例使用新的CUDA 4.0内核启动驱动程序API
simpleVoteIntrinsics --简单的程序,演示如何在CUDA内核中使用Vote(any,all)内部指令。 要求计算能力2.0或更高。
simpleVoteIntrinsics_nvrtc–简单的程序,演示如何使用NVRTC API在CUDA内核中使用运行时编译来使用Vote(any,all)内部指令。 要求计算能力2.0或更高。
simpleZeroCopy --这个例子说明了如何使用Zero MemCpy,内核可以直接读取和写入固定的系统内存。
systemWideAtomics --系统范围的原子指令的简单演示。
template --一个简单的模板项目,可以作为创建新CUDA项目的起点。
UnifiedMemoryStreams --此示例演示了如何在单个GPU上使用OpenMP和带有统一内存的流。
vectorAdd --此CUDA运行时API示例是一个非常基本的示例,它实现了逐元素向量添加。
它与说明编程指南第3章的示例相同,但增加了一些错误检查。
vectorAdd_nvrtc–此CUDA驱动程序API示例使用NVRTC进行向量添加内核的运行时编译。 演示的矢量加法内核与编程指南第3章的示例相同。
vectorAddDrv --此向量加法样本是逐个元素实现的基本样本。 它与说明编程指南第3章的示例相同,但增加了一些错误检查。
此示例还使用新的CUDA 4.0内核启动驱动程序API。
----------------------------------------------------------------2
bandwidthTest --这是一个简单的测试程序,用于测量GPU的memcopy带宽和PCI-e上的memcpy带宽。
此测试应用程序能够测量设备到设备的复制带宽,主机到设备复制带宽以用于可分页和页面锁定的内存,
以及设备用于托管可分页和页面锁定内存的复制带宽。
deviceQuery --此示例枚举系统中存在的CUDA设备的属性。
deviceQueryDrv --此示例枚举使用CUDA Driver API调用存在的CUDA设备的属性
p2pBandwidthLatencyTest --此应用程序演示了GPU对之间的CUDA点对点(P2P)数据传输,并计算延迟和带宽。 测试了使用P2P和没有P2P的GPU对测试。
topologyQuery --关于如何查询具有多个GPU的系统拓扑的简单示例
----------------------------------------------------------------3
bindlessTexture --此示例演示了在CUDA中使用cudaSurfaceObject,cudaTextureObject和MipMap支持。 需要具有计算能力的GPU SM 3.0才能运行该示例。
Mandelbrot --此示例使用CUDA以交互方式计算和显示Mandelbrot或Julia集。
它还说明了使用“双单”算法来提高缩放模式的长度。 此示例使用双精度。 感谢NewTek的Mark Granger提交了此代码示例。
marchingCubes --此示例使用行进立方体算法从体积数据集中提取几何等值面。 它使用Thrust库中的scan(前缀和)函数来执行流压缩
simpleD3D10 --简单的程序,演示了CUDA和Direct3D10之间的互操作性。
该程序使用CUDA生成顶点数组,并使用Direct3D10渲染几何体。 需要具备Direct3D功能的设备。
simpleD3D10RenderTarget --简单的程序,演示Direct3D10和CUDA之间的rendertargets的互操作。
该程序使用带有CUDA的RenderTarget位置,并生成带有可视化的直方图。 需要具备Direct3D10功能的设备。
simpleD3D10Texture --简单的程序,演示了如何将CUDA与Direct3D10 Texture进行互操作。
该程序创建了许多从CUDA内核生成的D3D10纹理(2D,3D和CubeMap)。 然后Direct3D在屏幕上呈现结果。 需要具备Direct3D10功能的设备
simpleD3D11Texture --简单的程序,演示了与CUDA的Direct3D11纹理互操作性。
该程序创建了许多从CUDA内核写入的D3D11纹理(2D,3D和CubeMap)。 然后Direct3D在屏幕上呈现结果。 需要具备Direct3D功能的设备。
simpleD3D9 --简单的程序,演示了CUDA和Direct3D9之间的互操作性。 该程序使用CUDA生成顶点数组,并使用Direct3D9渲染几何体。 需要支持Direct3D的设备。
simpleD3D9Texture --简单的程序,演示了与CUDA的Direct3D9 Texture互操作性。
该程序创建了许多从CUDA内核写入的D3D9纹理(2D,3D和CubeMap)。 然后Direct3D在屏幕上呈现结果。 需要支持Direct3D的设备。
simpleGL --简单的程序,演示了CUDA和OpenGL之间的互操作性。 该程序使用CUDA修改顶点位置,并使用OpenGL渲染几何体。
simpleGLES --演示CUDA和OpenGL ES(aka Graphics interop)之间的数据交换。 该程序使用CUDA修改顶点位置,并使用OpenGL ES渲染几何体。
simpleGLES_EGLOutput–演示CUDA和OpenGL ES(aka Graphics interop)之间的数据交换。
该程序使用CUDA修改顶点位置,并使用OpenGL ES渲染几何体,并演示如何使用EGLOutput机制和DRM库直接渲染到显示。
simpleGLES_screen–演示CUDA和OpenGL ES(aka Graphics interop)之间的数据交换。 该程序使用CUDA修改顶点位置,并使用OpenGL ES渲染几何体。
simpleTexture3D --演示在CUDA中使用3D纹理的简单示例
SLID3D10Texture --简单的程序,演示SLI与Direct3D10纹理与CUDA的互操作性。
该程序创建一个D3D10纹理,该纹理从CUDA内核写入。 然后Direct3D在屏幕上呈现结果。 需要具备Direct3D功能的设备
volumeFiltering --此示例演示了使用3D纹理和3D曲面写入进行3D体积过滤
volumeRender --此示例演示使用3D纹理的基本体积渲染
----------------------------------------------------------------4
bicubicTexture --此示例演示了如何使用CUDA纹理有效地实现双立方B样条插值滤波器。
bilateralFilter --双边滤波器是一种边缘保持非线性平滑滤波器,采用CUDA和OpenGL渲染实现。 它可用于图像恢复和去噪。
通过考虑其邻居之间的空间距离和颜色距离,每个像素是权重。 参考文献:“C.Tomasi,R。Manduchi,
灰色和彩色图像的双边过滤,ICCV的进展,1998,http://users.soe.ucsc.edu/~manduchi/Papers/ICCV98.pdf
boxFilter --使用CUDA和OpenGL渲染的快速图像框滤镜
convolutionFFT2D --该示例演示了如何使用FFT变换有效地实现具有非常大的内核大小的2D卷积。
convolutionSeparable --该示例实现了具有高斯核的2D信号的可分离卷积滤波器。
convolutionTexture --基于纹理的可分离2D卷积与高斯核的实现。 用于与convolutionSeparable进行性能比较
cudaDecodeD3D9 --此示例演示了如何有效地使用CUDA视频解码器API解码MPEG-2,VC-1或H.264源。
视频的YUV到RGB转换是用CUDA内核完成的。 输出结果呈现给D3D9表面。
解码后的视频不会显示在屏幕上,但在命令行参数中使用-displayvideo,可以看到视频输出。
需要具备Direct3D功能的设备和Compute Capability 2.0或更高版本
cudaDecodeGL --此示例演示了如何有效地使用CUDA视频解码器API来解码基于MPEG-2,VC-1和H.264的视频源。
视频的YUV到RGB转换是用CUDA内核完成的。 输出结果呈现给OpenGL表面。
解码后的视频为黑色,但可以通过在命令行中添加-displayvideo来启用。 要求计算能力2.0或更高。
dct8x8 --此示例演示了如何使用CUDA执行8 x 8像素块的离散余弦变换(DCT):
根据定义的简单实现和许多库中使用的更传统的方法。 与在片段着色器中实现DCT相反,CUDA允许更容易和更有效的实现。
dwtHaar1D --对于1D信号的离散Haar小波分解,其长度为2的幂
dxtc --使用CUDA的高质量DXT压缩。 此示例显示如何在GPU上并行实现现有的计算密集型CPU压缩算法,并获得一个数量级的性能改进
EGLStream_CUDA_CrossGPU–演示CUDA和EGL Streams互操作,其中消费者的EGL流在一个GPU上,生产者在另一个上,而消费者 - 生产者都是不同的过程
CUDA_EGLStreams_Interop–演示CUDA和EGL Streams之间的数据交换
EGLSync_CUDA_Interop–演示CUDA事件和EGL Sync / EGL图像之间的互操作性,使用它可以在GPU上实现GL-EGL-CUDA操作的同步,而不是阻止CPU进行同步。
histogram --此示例演示了64-bin和256-bin直方图的有效实现
HSOpticalFlow --变分光流估计实例。 使用纹理进行图像操作。 显示了使用CUDA可以加速PDE求解器的简单性
imageDenoising --该示例演示了两种自适应图像去噪技术:KNN和NLM,基于纹素之间的几何和颜色距离的计算。
虽然这两种技术都是在使用着色器的DirectX SDK中实现的,但是除了DirectX对应物之外,还实现了利用共享内存的后一种技术的大幅加速变化。
postProcessGL --此示例演示如何使用CUDA对在OpenGL中呈现的图像进行后处理。
recursiveGaussian --此示例使用Deriche的递归方法实现高斯模糊。 此方法的优点是执行时间与过滤器宽度无关
simpleCUDA2GL --此示例演示如何使用最有效的方法将CUDA映像复制回OpenGL
SobelFilter --该示例实现了用于8位单色图像的Sobel边缘检测滤波器
stereoDisparity --一个CUDA程序,演示如何使用SIMD SAD(绝对差值和)内在函数计算立体视差图。 要求计算能力2.0或更高。
----------------------------------------------------------------5
binomialOptions --此示例评估二项式模型下给定的一组欧式期权的公平看涨价格。
binomialOptions_nvrtc–此示例评估二项式模型下给定的一组欧式期权的公平看涨价格。 此示例使用NVRTC进行运行时编译。
BlackScholes --该样本通过Black-Scholes公式评估公平召唤并为一组给定的欧洲期权定价
BlackScholes_nvrtc–此示例通过Black-Scholes公式评估公平调用并为一组给定的欧洲期权定价,使用NVRTC编译运行时涉及的CUDA内核
MonteCarloMultiGPU --此示例使用蒙特卡罗方法评估一组给定欧洲期权的公平价格,充分利用系统中安装的所有支持CUDA的GPU。
如果存在GTX 200类GPU,此示例使用双精度硬件。 该示例还利用CUDA 4.0功能来支持使用单个CPU线程来控制多个GPU
quasirandomGenerator --该示例实现了Niederreiter Quasirandom Sequence Generator和Inverse Cumulative Normal Distribution函数,用于生成标准正态分布。
quasirandomGenerator_nvrtc–此示例实现了Niederreiter Quasirandom Sequence Generator和Inverse Cumulative Normal Distribution函数,
用于生成标准正态分布,使用NVRTC编译运行时涉及的CUDA内核。
SobolQRNG --此示例实现了Sobol Quasirandom Sequence Generator。
fluidsD3D9 --使用CUDA和CUFFT进行流体模拟的示例,使用Direct3D 9渲染。 需要具备Direct3D功能的设备。
fluidsGL --使用CUDA和CUFFT进行流体模拟的示例,使用OpenGL渲染
fluidsGLES --使用CUDA和CUFFT进行流体模拟的示例,使用OpenGLES渲染
nbody --该样本演示了CUDA中重力n体模拟的高效全对模拟。此示例附带GPU Gems 3章节“使用CUDA进行快速N体仿真”。
使用CUDA 5.5,Tesla K20c的性能已经提高到超过1.8TFLOP / s的单精度。 Double Performance在所有Kepler和Fermi GPU架构上也得到了改进。
从CUDA 4.0开始,nBody示例已经更新,以利用新功能轻松地在单个PC中跨多个GPU扩展n体仿真。在命令行中添加“-numbodies = ”将允许用户设置用于模拟的物体数量。
在命令行选项中添加“-numdevices = ”将使示例使用N个设备(如果可用)进行模拟。在此模式下,使用“零复制”而不是从设备存储器中读取系统存储器中所有实体的位置和速度数据。
对于少量设备(4个或更少)和足够多的主体,带宽不是瓶颈,因此我们可以在这些设备上实现强大的扩展。
nbody_opengles–该样本演示了CUDA中重力n体模拟的高效全对模拟。 与OpenGL nbody示例不同,没有用户交互。
nbody_screen–该样本演示了CUDA中重力n体模拟的高效全对模拟。 与OpenGL nbody示例不同,没有用户交互
oceanFFT --此示例使用CUFFT库模拟海洋高度字段,并使用OpenGL渲染结果。
particles --该示例使用CUDA来模拟和可视化大量粒子及其物理相互作用。
在命令行中添加“-particles = ”将允许用户设置粒子数以进行模拟。 此示例使用原子操作或Thrust库中的快速基数排序实现统一的网格数据结构
smokeParticles --使用半角切片技术进行体积阴影的烟雾模拟。 使用CUDA进行程序仿真,使用Thrust Library进行排序算法,使用OpenGL进行图形渲染。
alignedTypes --一个简单的测试,显示对齐和未对齐结构之间的巨大访问速度差距。
c++11_cuda–此示例演示了CUDA中的C ++ 11功能支持。 它扫描输入文本文件并打印否。 出现的x,y,z,w字符
cdpAdvancedQuicksort --此示例演示了使用CUDA Dynamic Parallelism实现的高级快速排序。 此示例需要具有3.5或更高计算能力的设备。
cdpBezierTessellation --此示例演示了使用CUDA Dynamic Parallelism实现的线的贝塞尔曲面细分。 此示例需要具有3.5或更高计算能力的设备。
cdpLUDecomposition --此示例演示了使用CUDA Dynamic Parallelism实现的LU Decomposition。 此示例需要具有3.5或更高计算能力的设备
cdpQuadtree --此示例演示了使用CUDA Dynamic Parallelism实现的Quad Trees。 此示例需要具有3.5或更高计算能力的设备。
concurrentKernels --此示例演示了如何使用CUDA流在计算能力为2.0或更高的设备上并发执行多个内核。
计算能力1.x的设备将按顺序运行内核。 它还说明了如何使用CUDA 3.2中引入的新cudaStreamWaitEvent函数在CUDA流之间引入依赖关系
conjugateGradientMultiBlockCG --此示例使用多块协作组在GPU上实现共轭梯度求解器,也使用统一内存。
conjugateGradientMultiDeviceCG --此示例使用多设备协作组在多个GPU上实现共轭梯度求解器,还使用使用预取和使用提示优化的统一内存。
eigenvalues --计算所有特征值的全部或子集是线性代数,统计学,物理学和许多其他领域中的重要问题。
该示例演示了二分算法的并行实现,该算法用于计算具有CUDA的任意大小的三对角对称矩阵的所有特征值。
fastWalshTransform --自然地(Hadamard) - 有序快速沃尔什变换用于任意合格长度的批量向量,其大小为2的幂。
FDTD3d --此示例在3D表面上应用有限差分时域进展模板。
FunctionPointers --此示例说明了如何使用函数指针并为8位单色图像实现Sobel边缘检测滤镜。
interval --区间算术运算符的例子。 使用各种C ++功能(模板和递归)。 递归模式需要Compute SM 2.0功能
lineOfSight --该示例是一种简单的视线算法的实现:给定高度图和源自某个观察点的光线,它计算沿着光线从观察点可见的所有点。
该实施基于Thrust库(http://code.google.com/p/thrust/)。
matrixMulDynlinkJIT --此示例使用CUDA驱动程序API重新访问矩阵乘法。
它演示了如何在运行时链接到CUDA驱动程序以及如何使用PTX代码中的JIT(即时)编译。
为了清楚地阐述各种CUDA编程原理而编写它,而不是为了为矩阵乘法提供最高性能的通用内核。 CUBLAS提供高性能矩阵乘法。
mergeSort --此示例实现了合并排序(也称为Batcher的排序),属于排序网络类的算法。
虽然与具有更好的渐近算法复杂度(即,合并排序或基数排序)的算法相比,在大序列上通常是低效的,
但是可以是用于对短批到中等(键,值)阵列对的批量进行分类的选择算法。
请参阅H. W. Lang的优秀教程http:// www.iti.fh-flensburg.de/lang/algorithmen/sortieren/networks/indexen.htm
newdelete --此示例演示了通过CUDA 4.0提供的设备C ++ new和delete运算符以及虚函数声明的动态全局内存分配。
ptxjit --此示例使用Driver API从PTX代码即时编译(JIT)内核。
此外,此示例演示了CUDA运行时和CUDA驱动程序API调用的无缝互操作性功能。
对于CUDA 5.5,此示例显示如何使用cuLink *函数在运行时使用CUDA驱动程序链接PTX程序集。
radixSortThrust --此示例演示了一个非常快速有效的并行基数排序使用Thrust库。 包含的RadixSort类可以对键值对(使用float或无符号整数键)或键进行排序。
reduction --并行和减少,用于计算大数值的总和。 此示例演示了1:数据并行算法(如缩减)的几个重要优化策略。
reductionMultiBlockCG --该示例演示了使用多块协作组的单次减少。 此示例要求具有计算能力6.0或更高的设备具有计算抢占。
scalarProd --此示例计算给定输入矢量对集的标量积。
scan --此示例演示了并行前缀和的有效CUDA实现,也称为“扫描”。
给定一个数字数组,scan计算一个新数组,其中每个元素是输入数组中所有元素之前的总和。
segmentationTreeThrust --此示例演示了图像分割树构造的方法。 该方法基于Boruvka的MST算法。
shfl_scan–此示例演示如何使用shuffle内在__shfl_up跨线程块执行扫描操作。 具有计算能力SM 3.0的GPU。 需要运行样本
simpleHyperQ --此示例演示如何使用CUDA流在提供HyperQ(SM 3.5)的设备上并发执行多个内核。 没有HyperQ的设备(SM 2.0和SM 3.0)将同时运行最多两个内核。
sortingNetworks --此示例实现了bitonic排序和奇偶合并排序(也称为Batcher的排序),属于排序网络类的算法。
虽然通常是低效的,但对于具有更好渐近算法复杂度的算法(即合并排序或基数排序)的大型序列,
这可能是用于对短批量到中等(键,值)阵列对的批量进行排序的首选算法。
请参阅H. W. Lang的优秀教程http://www.iti.fh-flensburg.de/lang/algorithmen/ sortieren / networks / indexen.htm
StreamPriorities --此示例演示了流优先级的基本用法。
threadFenceReduction --此示例演示如何使用线程Fence内部函数对值数组执行简化操作,
以在单个内核中生成单个值(与“简化”CUDA示例中显示的两个或更多内核调用相反)。
单遍减少需要全局原子指令(Compute Capability 2.0或更高版本)和_threadfence()内在函数(CUDA 2.2或更高版本)。
threadMigration --简单的程序,说明如何使用CUDA Context Management API并使用新的CUDA 4.0参数传递和CUDA启动API。
CUDA上下文可以单独创建,并独立地附加到不同的线程。
transpose --此示例演示了Matrix Transpose。 显示出不同的性能以实现高性能。
warpAggregatedAtomicsCG --此示例演示了如何使用协作组(CG)执行warp聚合原子,这是一种在许多线程原子地添加到单个计数器时提高性能的有用技术。
batchCUBLAS --一个CUDA示例,演示如何使用批处理的CUBLAS API调用来提高整体性能。
BiCGStab --一个CUDA样本,演示了使用CUSPARSE和CUBLAS的非对称和对称正定(s.p.d.)线性系统的双共轭梯度稳定(BiCGStab)迭代方法。
boundSegmentsNPP --NPP CUDA示例演示使用nppiLabelMarkers在8位灰度图像中生成连接的区域段标签,
然后使用nppiCompressMarkerLabels将生成的标签的稀疏列表压缩到图像中的最小数量的唯一标记区域。
最后,使用nppiBoundSegments围绕图像中的每个分割区域添加边界。
boxFilterNPP --一个NPP CUDA示例,演示如何使用NPP FilterBox函数执行Box Filter。
cannyEdgeDetectorNPP --一个NPP CUDA示例,演示了与nppiFilterCannyBorder_8u_C1R Canny边缘检测图像滤镜功能一起使用的建议参数。
此功能需要单通道8位灰度输入图像。 您可以通过首先调用nppiColorToGray()或nppiRGBToGray()从彩色图像生成灰度图像。
Canny边缘检测功能结合并改进了使用多个步骤生成边缘检测图像所需的技术。
conjugateGradient --此示例使用CUBLAS和CUSPARSE库在GPU上实现共轭渐变求解器。
conjugateGradientPrecond --此示例使用CUBLAS和CUSPARSE库在GPU上实现预处理的共轭梯度求解器。
conjugateGradientUM --此示例使用CUBLAS和CUSPARSE库在GPU上使用统一内存实现共轭梯度求解器
cuHook --此示例演示如何使用CUDA构建和使用拦截库。
必须通过LD_PRELOAD加载库,例如 LD_PRELOAD = <完整路径> / libcublas.so.1 ./cup Hook
cuSolverDn_LinearSolver–一个CUDA示例演示了cuSolverDN的LU,QR和Cholesky分解
cuSolverRf --一个CUDA示例演示了cuSolver的重构库 - CUSOLVERRF
cuSolverSp_LinearSolver --一个CUDA示例演示了cuSolverSP的LU,QR和Cholesky分解
cuSolverSp_LowlevelCholesky–使用cuSolverSP的低级API演示Cholesky分解的CUDA示例。
cuSolverSp_LowlevelQR–使用cuSolverSP的低级API演示QR分解的CUDA示例
FilterBorderControlNPP --此NPP CUDA示例演示了如何在最常见的模式(启用边框控制)中使用任何边界版本的NPP过滤功能,
可以用于复制NPP功能的等效非边界版本的结果,并且可以 用于启用和禁用各种源图像边缘上的边框控制,具体取决于源图像的哪个部分用作输入。
freeImageInteropNPP --一个简单的CUDA示例演示了如何在NPP中使用FreeImage库。
histEqualizationNPP --此CUDA示例演示了如何使用NPP进行图像数据的直方图均衡
jpegNPP --此示例演示了一个简单的图像处理pipline。 首先,JPEG文件被霍夫曼解码并且逆DCT变换和去量化。
然后调整不同的大小。 最后,对经尺寸调整的图像进行量化,正向DCT变换和霍夫曼编码。
MC_EstimatePiInlineP–该样本使用蒙特卡罗模拟来估计Pi(使用内联PRNG)。 此示例还使用NVIDIA CURAND库。
MC_EstimatePiInlineQ–该样本使用蒙特卡罗模拟来估计Pi(使用内联QRNG)。 此示例还使用NVIDIA CURAND库。
MC_EstimatePiP–该样本使用蒙特卡罗模拟来估计Pi(使用批量PRNG)。 此示例还使用NVIDIA CURAND库。
MC_EstimatePiQ–该样本使用蒙特卡罗模拟来估计Pi(使用批量QRNG)。 此示例还使用NVIDIA CURAND库
MC_SingleAsianOptionP–此示例使用蒙特卡罗模拟使用NVIDIA CURAND库的单个亚洲选项。
MersenneTwisterGP11213 --此示例演示了cuRAND中的Mersenne Twister随机数发生器GP11213。
nvgraph_Pagerank–使用NVGRAPH库演示页面排名计算的CUDA示例。
nvgraph_SemiRingSpMV–使用NVGRAPH库演示半环SpMV的CUDA示例
nvgraph_SpectralClustering–使用NVGRAPH库演示光谱聚类的CUDA示例。
nvgraph_SSSP–使用NVGRAPH库演示单源最短路径(SSSP)计算的CUDA示例。
randomFog --此示例说明了CURAND生成的伪随机数和准随机数。
simpleCUBLAS --使用CUDA 4.0中提供的新CUBLAS API接口使用CUBLAS的示例。
simpleCUBLASXT --使用CUBLAS-XT库的示例。
simpleCUFFT --使用CUFFT的示例。 在该示例中,CUFFT用于通过将两者转换为频域,
将它们相乘以及将信号转换回时域来计算具有一些滤波器的一些信号的1D卷积。 cuFFT计划是使用简单和高级API函数创建的。
simpleCUFFT_2d_MGPU–使用CUFFT的示例。 在这个例子中,CUFFT用于计算某些信号的2D卷积,通过将两者转换为频域,将它们相乘,并在多GPU上将信号转换回时域
simpleCUFFT_callback–使用CUFFT的示例。 在该示例中,CUFFT用于通过将两者转换为频域,
将它们相乘以及将信号转换回时域来计算具有一些滤波器的一些信号的1D卷积。
此示例与Simple CUFFT示例之间的区别在于乘法步骤由CUFFT内核完成,并使用用户提供的CUFFT回调例程,而不是通过单独的内核调用。
simpleCUFFT_MGPU–使用CUFFT的示例。 在这个例子中,CUFFT用于计算某些信号的1D卷积,通过将两者转换为频域,将它们相乘,并将信号转换回多GPU上的时域
simpleDevLibCUBLAS --此示例实现了一个简单的CUBLAS函数调用,它调用运行CUBLAS函数的GPU设备API库。 此示例需要支持SM 3.5的设备。
FreeImage是一个开源图像库。 FreeImage通常可以使用您的发行版的包管理器系统安装在Linux上。
FreeImage也可以从FreeImage网站下载。 FreeImage也与CUDA样本一起重新分发。
MPI(消息传递接口)是用于在分布式进程之间传递数据的API。 可以使用Linux发行版的包管理器系统安装MPI编译器。
它也可以在一些在线资源上使用,例如Open MPI。 在Windows上,要构建和运行MPI-CUDA应用程序,可以安装MS-MPI SDK。
DirectX是一组API,旨在允许在Microsoft平台上开发多媒体应用程序。
对于Microsoft平台,NVIDIA的CUDA驱动程序支持DirectX。
几个用于Windows的CUDA示例演示了CUDA-DirectX互操作性,用于构建需要安装Direct X SDK(2010年6月或更新版本)的样本,
这需要安装在Windows 7,Windows 10和Windows Server 2008上,其他Windows操作系统要做 不需要显式安装DirectX SDK。
OpenGL是用于2D和3D渲染的图形库。 在支持OpenGL的系统上,NVIDIA的OpenGL实现随CUDA驱动程序一起提供。
OpenGL ES是一个用于2D和3D渲染的嵌入式系统图形库。 在支持OpenGL ES的系统上,NVIDIA的OpenGL ES实现随CUDA驱动程序一起提供。
OpenMP是一种用于多处理编程的API。 可以使用Linux发行版的软件包管理器系统安装OpenMP。 它通常预装了GCC。 它也可以在OpenMP网站上找到。
屏幕是QNX操作系统上的窗口系统。 屏幕通常作为根文件系统的一部分找到。
X11是* -nix风格操作系统中常见的窗口系统。 X11可以使用Linux发行版的软件包管理器安装,并预装在Mac OS X系统上。
EGL是Khronos渲染API(如OpenGL,OpenGL ES或OpenVG)与底层本机平台窗口系统之间的接口。
EGLOutput是一组EGL扩展,允许EGL直接渲染到显示器。
EGLSync是一组EGL扩展,它提供同步原语的同步对象,表示可以测试或等待完成的事件。
某些CUDA样本需要这些CUDA功能。 它们由CUDA Toolkit或CUDA Driver提供。 您的系统可能无法使用某些功能
CUFFT回调例程是用户提供的内核例程,CUFFT在加载或存储数据时将调用这些例程。 这些回调例程仅适用于Linux x86_64和ppc64le系统。
CDP(CUDA Dynamic Paralellism)允许从GPU上运行的线程启动内核。 CDP仅适用于SM架构为3.5或以上的GPU。
多块协作组(MBCG)扩展了协作组和CUDA编程模型以表达线程间块同步。 MBCG适用于具有Pascal和更高架构的GPU。
多设备协作组扩展了协作组和CUDA编程模型,使得在多个GPU上执行的线程块能够在它们执行时协作和同步。 此功能适用于具有Pascal和更高体系结构的GPU。
CUBLAS(CUDA Basic Linear Algebra Subroutines)是BLAS库的GPU加速版本
IPC(进程间通信)允许进程共享设备指针。 IPC仅适用于Linux x86_64和ppc64le系统。
CUFFT(CUDA快速傅里叶变换)是GPU加速的FFT库。
CURAND(CUDA随机数生成)是GPU加速的RNG库。
CUSPARSE(CUDA稀疏矩阵)提供用于稀疏矩阵计算的线性代数子程序。
CUSOLVER库是一个基于CUBLAS和CUSPARSE库的高级包。
它将三个独立的库组合在一个伞下,每个库可以独立使用或与其他工具包库一起使用。
COLOLVER的目的是提供有用的类似LAPACK的特性,例如用于密集矩阵的公共矩阵分解和三角形求解例程,稀疏最小二乘求解器和特征值求解器。
此外,cuSolver提供了一个新的重构库,可用于解决具有共享稀疏模式的矩阵序列。
NPP(NVIDIA Performance Primitives)提供GPU加速的图像,视频和信号处理功能。
NVGRAPH是一个GPU加速的图形分析库。
NVRTC(CUDA RunTime Compilation)是CUDA C ++的运行时编译库。
NVCUVID(NVIDIA CUDA视频解码器)提供GPU加速视频解码功能。
流优先级允许创建具有指定优先级的流。 流优先级仅适用于SM架构为3.5或更高的GPU。
UVM(统一虚拟内存)支持CPU和GPU都可以访问的内存,而无需在两者之间进行显式复制。 UVM仅适用于Linux和Windows系统。
FP16是一种16位浮点格式。 一位用于符号,五位用于指数,十位用于尾数。 FP16仅适用于特定的移动平台。
cdp:CUDA Dynamic Parallelism cuda动态并行
NVRTC(CUDA RunTime Compilation)是CUDA C ++的运行时编译库。
NPP(NVIDIA Performance Primitives)提供GPU加速的图像,视频和信号处理功能。
MPI(消息传递接口)是用于在分布式进程之间传递数据的API。 可以使用Linux发行版的包管理器系统安装MPI编译器。
它也可以在一些在线资源上使用,例如Open MPI。 在Windows上,要构建和运行MPI-CUDA应用程序,可以安装MS-MPI SDK。
SM,Stream-Multiprocessor:流多处理器
SP,Stream-Processor:流处理器
<<
cuda学习顺序:
1.枚举系统中存在的CUDA设备的属性(1_Utilities->deviceQuer,deviceQueryDrv;)
deviceQuer和deviceQueryDrv获取设备属性所用方法不同,结果一致
大体了解以下,设备的一些属性,以后会用到
2.一个简单的模板项目,可以作为创建新CUDA项目的起点(0_Simple->template)
分别使用CPU和GPU对一个数组的每一个元素乘以线程数,然后进行对比
其中包含了gpu内存分配,拷贝