CUDA compatibility (v1.4.1)

更新时间:
复制 MD 格式

This topic describes the compatibility of PPU with CUDA.

PPU CUDA compatibility solution, principles, and advantages

Compute Unified Device Architecture (CUDA) is a parallel computing architecture from NVIDIA. It enables developers to use the powerful computing capabilities of NVIDIA graphics cards to accelerate compute-intensive tasks. It provides a programming model and an API that allows programmers to write code for GPU parallel computing using languages such as C, C++, and Fortran. Using CUDA, developers can execute massively parallel computations on graphics cards to improve program performance. It is widely used in fields such as scientific computing, image editing, and machine learning. PPU is compatible with CUDA. For more information about the solution, principles, and advantages, see CUDA Compatibility Discussion.pptx.

CUDA Sample compatibility

CUDA Sample compatibility list

CUDA Sample

Status

Comments

simpleVoteIntrinsics

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

vectorAdd_nvrtc

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

deviceQuery

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

reduction

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

tf32TensorCoreGemm

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

shfl_scan

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

warpAggregatedAtomicsCG

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

concurrentKernels

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

bf16TensorCoreGemm

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

bandwidthTest

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

UnifiedMemoryPerf

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

binaryPartitionCG

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

conjugateGradientMultiBlockCG

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cudaCompressibleMemory

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cudaTensorCoreGemm

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

globalToShmemAsyncCopy

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

matrixMul

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

matrixMulDrv

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

nvJPEG

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

nvJPEG_encoder

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

p2pBandwidthLatencyTest

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleAWBarrier

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleCudaGraphs

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleZeroCopy

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleDrvRuntime

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

vectorAddMMAP

❌ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

The sample for 11.1 has a dependency on PTX in its compilation flow. PPU does not support PTX.

simpleIPC

✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

streamOrderedAllocation

✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

streamOrderedAllocationIPC

✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simplePrintf

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleTemplates

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleOccupancy

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

topologyQuery

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

clock

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cppIntegration

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

dwtHaar1D

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

vectorAdd

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

vectorAddDrv

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

scalarProd

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleVoteIntrinsics_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

SobolQRNG

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleCooperativeGroups

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleAtomicIntrinsics

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cudaOpenMP

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

fp16ScalarProduct

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

inlinePTX

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleMPI

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

template

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleHyperQ

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

reductionMultiBlockCG

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

threadFenceReduction

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

mergeSort

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

convolutionSeparable

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

FDTD3d

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

matrixMulCUBLAS

❌ 11.5 ❌ 11.6 ❌ 11.7 ❌ 11.8 ❌ 12.0 ❌ 12.1 ❌ 12.2 ❌ 12.3 ❌ 12.4 ❌ 12.5 ❌ 12.6

The calculation results have precision differences compared to NVIDIA's. This is because of differences in the matrixMul calculation method. PPU chose an implementation with better performance.

sortingNetworks

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

fastWalshTransform

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

alignedTypes

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

deviceQueryDrv

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

scan

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

BlackScholes

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

transpose

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

histogram

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

MC_SingleAsianOptionP

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

MC_EstimatePiInlineP

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

quasirandomGenerator

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

binomialOptions

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

MonteCarloMultiGPU

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

UnifiedMemoryStreams

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

asyncAPI

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

c++11_cuda

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cppOverload

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cuHook

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

eigenvalues

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

interval

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

newdelete

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

radixSortThrust

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

segmentationTreeThrust

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleAssert

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleAttributes

❌ 11.5 ❌ 11.6 ❌ 11.7 ❌ 11.8 ❌ 12.0 ❌ 12.1 ❌ 12.2 ❌ 12.3 ❌ 12.4 ❌ 12.5 ❌ 12.6

The sample passes, but the running time is very long. This is because the

"Maximum y- or z-dimension of a grid of thread blocks" is 65535 on NVIDIA GPUs but 2^31-1 on PPU. The sample code depends on this value, which causes the extremely long running time.

simpleMultiCopy

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleMultiGPU

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleP2P

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleSeparateCompilation

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleStreams

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

threadMigration

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

vectorAddDrv

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

binomialOptions_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

clock_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

inlinePTX_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

matrixMul_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

quasirandomGenerator_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleAssert_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleAtomicIntrinsics_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleTemplates_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

simpleVoteIntrinsics_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

BlackScholes_nvrtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

libNVVM

❌ 12.3 ❌ 12.4 ❌ 12.5 ❌ 12.6

PPU is currently compatible with the definition of LLVM IR for nvgpu, but it is not fully compatible with the official NVIDIA NVVM IR definition.

StreamPriorities

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

MC_EstimatePiInlineQ

Related curand APIs are not yet fully supported.

MC_EstimatePiP

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

MC_EstimatePiQ

Related curand APIs, such as curandCreateGenerator, are not yet fully supported.

MersenneTwisterGP11213

Related curand APIs are not yet fully supported.

batchCUBLAS

Related curand APIs, such as cublasSetMatrix, are not yet fully supported.

batchedLabelMarkersAndLabelCompressionNPP

nppiLabelMarkersUFGetBufferSize_32u_C1R

nppiCompressMarkerLabelsGetBufferSize_32u_C1R

nppiLabelMarkersUFBatch_8u32u_C1R_Advanced_Ctx

nppiCompressMarkerLabelsUFBatch_32u_C1IR_Advanced_Ctx

The preceding APIs are not yet supported.

boxFilterNPP

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

conjugateGradientCudaGraphs

The cusparse library is not yet fully supported.

conjugateGradient

conjugateGradientMultiDeviceCG

conjugateGradientPrecond

conjugateGradientUM

cuSolverDn_LinearSolver

The cusparse library, including cusolverSpCreate, is not yet fully supported.

cuSolverRf

cuSolverSp_LinearSolver

cuSolverSp_LowlevelCholesky

cuSolverSp_LowlevelQR

graphMemoryFootprint

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

graphMemoryNodes

The APIs for memory allocation and deallocation are not yet defined because the header file has not been updated to this version.

immaTensorCoreGemm

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

jacobiCudaGraphs

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

matrixMulDynlinkJIT

DynlinkJIT is not currently supported.

memMapIPCDrv

The granularity obtained from cuMemGetAllocationGranularity is 2 MB, but PPU is designed for 8 MB. The check in the code needs to be modified.

nbody

Graphics and OpenGL related APIs are not supported.

Mandelbrot

particles

oceanFFT

simpleCUDA2GL

simpleGL

recursiveGaussian

ptxjit

PPU does not support PTX.

randomFog

Lacks graphical display capabilities.

simpleCUBLAS

CUBLAS API implementation is incomplete.

simpleCUBLASXT

simpleCUBLAS_LU

simpleCUFFT

The cuFFT library is not supported.

simpleCUFFT_2d_MGPU

simpleCUFFT_MGPU

simpleCUFFT_callback

systemWideAtomics

FilterBorderControlNPP

Related NPP APIs are not currently supported.

watershedSegmentationNPP

streamOrderedAllocationP2P

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

EGLStream_CUDA_CrossGPU

Related EGL APIs are not supported.

EGLStream_CUDA_Interop

EGLStreams_CUDA_Interop

EGLSync_CUDAEvent_Interop

GLES is not supported.

cuDLALayerwiseStatsStandalone

cuDLALayerwiseStatsHybrid

simpleGLES_EGLOutput

fluidsGLES

nbody_opengles

simpleGLES

simpleGLES_screen

nbody_screen

cuDLAHybridMode

cuDLAStandaloneMode

cuDLAErrorReporting

cudaNvSciNvMedia

cdpAdvancedQuicksort

The CUDA Dynamic Parallelism (CDP) feature is not supported.

cdpBezierTessellation

cdpQuadtree

cdpSimplePrint

cdpSimpleQuicksort

cudaNvSci

libnvscibuf.so not found.

NvSci is not currently supported.

dmmaTensorCoreGemm

PPU Tensor Cores do not support Double MMA instructions.

dxtc

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

freeImageInteropNPP

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

histEqualizationNPP

✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

cannyEdgeDetectorNPP

✅ 11.1 ✅ 11.2 ✅ 11.3 ✅ 11.4 ✅ 11.5 ✅ 11.6 ✅ 11.7 ✅ 11.8 ✅ 12.0 ✅ 12.1 ✅ 12.2 ✅ 12.3 ✅ 12.4 ✅ 12.5 ✅ 12.6

convolutionTexture

PPU does not support texture and GL features.

bindlessTexture

bicubicTexture

HSOpticalFlow

simpleLayeredTexture

simplePitchLinearTexture

simpleSurfaceWrite

simpleTexture

simpleTexture3D

simpleTextureDrv

simpleCubemapTexture

volumeFiltering

volumeRender

vulkanImageCUDA

stereoDisparity

boxFilter

bilateralFilter

postProcessGL

imageDenoising

fluidsGL

smokeParticles

lineOfSight

marchingCubes

convolutionFFT2D

dct8x8

NV12toBGRandResize

SobelFilter

FunctionPointers

simpleVulkan

Related Vulkan-CUDA features are not currently supported.

simpleVulkanMMAP

simpleD3D10

PPU does not support D3D graphics related APIs.

fluidsD3D9

simpleD3D11

simpleD3D11Texture

simpleD3D10RenderTarget

simpleD3D10Texture

SLID3D10Texture

VFlockingD3D10

simpleD3D12

simpleD3D9Texture

simpleD3D9

cudaGraphsPerfScaling

❌ 12.5 ❌ 12.6

The cudaGraphUpload API is not currently supported.

Unsupported CUDA Runtime APIs

This implementation is aligned with CUDA Runtime 12.3. Modules marked as [DEPRECATED] in the CUDA Runtime 12.3 specification are not supported and are not listed here. All APIs are supported except for the following:

List of unsupported APIs

Feature module

CUDA Runtime API name

Notes

Device Management

cudaDeviceFlushGPUDirectRDMAWrites

RDMA Flush. Does not affect RDMA usage.

cudaDeviceGetNvSciSyncAttributes

NvSci Lib. No current requirement.

cudaDeviceGetTexture1DLinearMaxWidth

Graphics-related. No requirement in AI scenarios.

External Resource Interoperability

cudaDestroyExternalMemory

Related to graphics API interaction. Only CUDA APIs are currently supported.

cudaExternalMemoryGetMappedBuffer

cudaExternalMemoryGetMappedMipmappedArray

cudaImportExternalMemory

cudaImportExternalSemaphore

cudaSignalExternalSemaphoresAsync

cudaWaitExternalSemaphoresAsync

Execution

Control

cudaSetDoubleForDevice

Deprecated as of CUDA 7.5.

Will not be supported.

cudaSetDoubleForHost

Deprecated as of CUDA 7.5.

Will not be supported.

Occupancy

cudaOccupancyMaxActiveClusters

Cluster-related.

cudaOccupancyMaxPotentialClusterSize

Memory Management

cudaArrayGetInfo

Except for cudaMemAdvise_v2, all are array-related. No requirement in AI scenarios.

cudaArrayGetMemoryRequirements

cudaArrayGetPlane

cudaArrayGetSparseProperties

cudaFreeArray

cudaFreeMipmappedArray

cudaGetMipmappedArrayLevel

cudaMalloc3DArray

cudaMallocArray

cudaMallocMipmappedArray

cudaMemAdvise_v2

cudaMemcpy2DArrayToArray

cudaMemcpy2DFromArray

cudaMemcpy2DFromArrayAsync

cudaMemcpy2DToArray

cudaMemcpy2DToArrayAsync

cudaMipmappedArrayGetMemoryRequirements

cudaMipmappedArrayGetSparseProperties

OpenGL Interoperability

cudaGLGetDevices

Graphics-related. No requirement in AI scenarios.

cudaGraphicsGLRegisterBuffer

cudaGraphicsGLRegisterImage

cudaWGLGetDevice

Direct3D 9 Interoperability

cudaD3D9GetDevice

cudaD3D9GetDevices

cudaD3D9GetDirect3DDevice

cudaD3D9SetDirect3DDevice

cudaGraphicsD3D9RegisterResource

Direct3D 10 Interoperability

cudaD3D10GetDevice

cudaD3D10GetDevices

cudaGraphicsD3D10RegisterResource

Direct3D 11 Interoperability

cudaD3D11GetDevice

cudaD3D11GetDevices

cudaGraphicsD3D11RegisterResource

VDPAU Interoperability

cudaGraphicsVDPAURegisterOutputSurface

cudaGraphicsVDPAURegisterVideoSurface

cudaVDPAUGetDevice

cudaVDPAUSetVDPAUDevice

EGL Interoperability

cudaEGLStreamConsumerAcquireFrame

cudaEGLStreamConsumerConnect

cudaEGLStreamConsumerConnectWithFlags

cudaEGLStreamConsumerDisconnect

cudaEGLStreamConsumerReleaseFrame

cudaEGLStreamProducerConnect

cudaEGLStreamProducerDisconnect

cudaEGLStreamProducerPresentFrame

cudaEGLStreamProducerReturnFrame

cudaEventCreateFromEGLSync

cudaGraphicsEGLRegisterImage

cudaGraphicsResourceGetMappedEglFrame

Graphics Interoperability

cudaGraphicsMapResources

cudaGraphicsResourceGetMappedMipmappedArray

cudaGraphicsResourceGetMappedPointer

cudaGraphicsResourceSetMapFlags

cudaGraphicsSubResourceGetMappedArray

cudaGraphicsUnmapResources

cudaGraphicsUnregisterResource

Surface Object Management

cudaCreateSurfaceObject

cudaDestroySurfaceObject

cudaGetSurfaceObjectResourceDesc

Graph Management

cudaGetCurrentGraphExec

Device function.

Requires CDP support.

cudaGraphAddExternalSemaphoresSignalNode

Mainly graphics-related. No requirement in AI scenarios.

cudaGraphAddExternalSemaphoresWaitNode

cudaGraphExecExternalSemaphoresSignalNodeSetParams

cudaGraphExecExternalSemaphoresWaitNodeSetParams

cudaGraphExecGetFlags

cudaGraphExternalSemaphoresSignalNodeGetParams

cudaGraphExternalSemaphoresSignalNodeSetParams

cudaGraphExternalSemaphoresWaitNodeGetParams

cudaGraphExternalSemaphoresWaitNodeSetParams

cudaGraphInstantiateWithParams

cudaGraphNodeGetEnabled

cudaGraphNodeSetEnabled

cudaGraphUpload

cudaGraphConditionalHandleCreate

cudaGraphSetConditional

Additionally, a small number of APIs have unsupported enumerations. These are not listed. The actual result returned at runtime, such as cudaErrorNotSupported or cudaErrorInvalidValue, is considered final.

CUDA cuDNN support status

Compared to cuDNN 8.5.0, the support status of cuDNN APIs is shown in the following table:

  • Most commonly used APIs for neural network (NN) applications are supported and optimized.

  • Compared to Ampere, all APIs can be supported by software. There are currently no PPU hardware limitations. Support will be gradually added in future software versions based on priority.

  • The current API support rate is 196/263, or 74.5%.

  • Excluding 26 deprecated APIs, the support rate is 196/237, or 82.7%.

cuDNN API support status

API

cuDNN 8.5.0

PPU 1.4

Status

Feature description

cudnnCreateRNNDescriptor

Yes

Yes

cudnnDestroyRNNDescriptor

Yes

Yes

cudnnSetRNNDescriptor_v8

Yes

Yes

cudnnGetRNNDescriptor_v8

Yes

Yes

cudnnSetRNNDescriptor_v6

Yes

Yes

cudnnGetRNNDescriptor_v6

Yes

Yes

cudnnSetRNNMatrixMathType

Yes

Yes

cudnnGetRNNMatrixMathType

Yes

Yes

cudnnSetRNNBiasMode

Yes

Yes

cudnnGetRNNBiasMode

Yes

Yes

cudnnRNNSetClip_v8

Yes

Yes

cudnnRNNGetClip_v8

Yes

Yes

cudnnRNNSetClip

Yes

Yes

cudnnRNNGetClip

Yes

Yes

cudnnSetRNNProjectionLayers

Yes

Yes

cudnnGetRNNProjectionLayers

Yes

Yes

cudnnGetRNNWorkspaceSize

Yes

Yes

cudnnGetRNNTrainingReserveSize

Yes

Yes

cudnnGetRNNTempSpaceSizes

Yes

Yes

cudnnGetRNNParamsSize

Yes

Yes

cudnnGetRNNWeightSpaceSize

Yes

Yes

cudnnGetRNNLinLayerMatrixParams

Yes

Yes

cudnnGetRNNLinLayerBiasParams

Yes

Yes

cudnnGetRNNWeightParams

Yes

Yes

cudnnRNNForwardInference

Yes

Yes

cudnnCreateRNNDataDescriptor

Yes

Yes

cudnnDestroyRNNDataDescriptor

Yes

Yes

cudnnSetRNNDataDescriptor

Yes

Yes

cudnnGetRNNDataDescriptor

Yes

Yes

cudnnRNNForward

Yes

Yes

cudnnCreateSeqDataDescriptor

Yes

Yes

cudnnDestroySeqDataDescriptor

Yes

Yes

cudnnSetSeqDataDescriptor

Yes

Yes

cudnnGetSeqDataDescriptor

Yes

Yes

cudnnCreateAttnDescriptor

Yes

Yes

cudnnDestroyAttnDescriptor

Yes

Yes

cudnnSetAttnDescriptor

Yes

Yes

cudnnGetAttnDescriptor

Yes

Yes

cudnnGetMultiHeadAttnBuffers

Yes

Yes

cudnnGetMultiHeadAttnWeights

Yes

Yes

cudnnMultiHeadAttnForward

Yes

Yes

cudnnAdvInferVersionCheck

Yes

Yes

cudnnRNNForwardTraining

Yes

Yes

cudnnRNNBackwardData

Yes

Yes

cudnnRNNBackwardData_v8

Yes

Yes

cudnnRNNBackwardWeights

Yes

Yes

cudnnRNNBackwardWeights_v8

Yes

Yes

cudnnDestroyCTCLossDescriptor

Yes

Yes

cudnnCreateCTCLossDescriptor

Yes

Yes

cudnnSetCTCLossDescriptor

Yes

Yes

cudnnGetCTCLossDescriptor

Yes

Yes

cudnnSetCTCLossDescriptorEx

Yes

Yes

cudnnGetCTCLossDescriptorEx

Yes

Yes

cudnnSetCTCLossDescriptor_v8

Yes

Yes

cudnnGetCTCLossDescriptor_v8

Yes

Yes

cudnnGetCTCLossWorkspaceSize_v8

Yes

Yes

cudnnCTCLoss

Yes

Yes

cudnnGetCTCLossWorkspaceSize

Yes

Yes

cudnnCTCLoss_v8

Yes

Yes

cudnnAdvTrainVersionCheck

Yes

Yes

cudnnBackendCreateDescriptor

Yes

Yes

cudnnBackendDestroyDescriptor

Yes

Yes

cudnnBackendInitialize

Yes

Yes

cudnnBackendFinalize

Yes

Yes

cudnnBackendSetAttribute

Yes

Yes

cudnnBackendGetAttribute

Yes

Yes

cudnnBackendExecute

Yes

Yes

cudnnCreateConvolutionDescriptor

Yes

Yes

cudnnDestroyConvolutionDescriptor

Yes

Yes

cudnnSetConvolution2dDescriptor

Yes

Yes

cudnnGetConvolution2dDescriptor

Yes

Yes

cudnnSetConvolutionNdDescriptor

Yes

Yes

cudnnGetConvolutionNdDescriptor

Yes

Yes

cudnnSetConvolutionMathType

Yes

Yes

cudnnGetConvolutionMathType

Yes

Yes

cudnnSetConvolutionGroupCount

Yes

Yes

cudnnGetConvolutionGroupCount

Yes

Yes

cudnnGetConvolution2dForwardOutputDim

Yes

Yes

cudnnGetConvolutionNdForwardOutputDim

Yes

Yes

cudnnGetConvolutionForwardAlgorithmMaxCount

Yes

Yes

cudnnGetConvolutionBackwardDataAlgorithmMaxCount

Yes

Yes

cudnnGetConvolutionForwardWorkspaceSize

Yes

Yes

cudnnGetConvolutionForwardAlgorithm_v7

Yes

Yes

cudnnFindConvolutionForwardAlgorithm

Yes

Yes

cudnnFindConvolutionForwardAlgorithmEx

Yes

Yes

cudnnConvolutionForward

Yes

Yes

cudnnConvolutionBiasActivationForward

Yes

Yes

cudnnGetConvolutionBackwardDataWorkspaceSize

Yes

Yes

cudnnFindConvolutionBackwardDataAlgorithm

Yes

Yes

cudnnFindConvolutionBackwardDataAlgorithmEx

Yes

Yes

cudnnGetConvolutionBackwardDataAlgorithm_v7

Yes

Yes

cudnnConvolutionBackwardData

Yes

Yes

cudnnGetFoldedConvBackwardDataDescriptors

Yes

Yes

cudnnCnnInferVersionCheck

Yes

Yes

cudnnGetConvolutionBackwardFilterWorkspaceSize

Yes

Yes

cudnnGetConvolutionBackwardFilterAlgorithmMaxCount

Yes

Yes

cudnnFindConvolutionBackwardFilterAlgorithm

Yes

Yes

cudnnFindConvolutionBackwardFilterAlgorithmEx

Yes

Yes

cudnnGetConvolutionBackwardFilterAlgorithm_v7

Yes

Yes

cudnnConvolutionBackwardFilter

Yes

Yes

cudnnCnnTrainVersionCheck

Yes

Yes

cudnnGetVersion

Yes

Yes

cudnnGetProperty

Yes

Yes

cudnnGetErrorString

Yes

Yes

cudnnCreate

Yes

Yes

cudnnDestroy

Yes

Yes

cudnnSetStream

Yes

Yes

cudnnGetStream

Yes

Yes

cudnnGetCudartVersion

Yes

Yes

cudnnCreateTensorDescriptor

Yes

Yes

cudnnDestroyTensorDescriptor

Yes

Yes

cudnnSetTensor4dDescriptor

Yes

Yes

cudnnSetTensor4dDescriptorEx

Yes

Yes

cudnnGetTensor4dDescriptor

Yes

Yes

cudnnSetTensorNdDescriptor

Yes

Yes

cudnnSetTensorNdDescriptorEx

Yes

Yes

cudnnGetTensorNdDescriptor

Yes

Yes

cudnnGetTensorSizeInBytes

Yes

Yes

cudnnCreateFilterDescriptor

Yes

Yes

cudnnDestroyFilterDescriptor

Yes

Yes

cudnnSetFilter4dDescriptor

Yes

Yes

cudnnGetFilter4dDescriptor

Yes

Yes

cudnnSetFilterNdDescriptor

Yes

Yes

cudnnGetFilterNdDescriptor

Yes

Yes

cudnnGetFilterSizeInBytes

Yes

Yes

cudnnDeriveBNTensorDescriptor

Yes

Yes

cudnnBatchNormalizationForwardInference

Yes

Yes

cudnnCreateOpTensorDescriptor

Yes

Yes

cudnnDestroyOpTensorDescriptor

Yes

Yes

cudnnSetOpTensorDescriptor

Yes

Yes

cudnnGetOpTensorDescriptor

Yes

Yes

cudnnCreatePoolingDescriptor

Yes

Yes

cudnnSetPooling2dDescriptor

Yes

Yes

cudnnSetPoolingNdDescriptor

Yes

Yes

cudnnGetPoolingNdForwardOutputDim

Yes

Yes

cudnnGetPooling2dForwardOutputDim

Yes

Yes

cudnnDestroyPoolingDescriptor

Yes

Yes

cudnnPoolingForward

Yes

Yes

cudnnCreateActivationDescriptor

Yes

Yes

cudnnSetActivationDescriptor

Yes

Yes

cudnnGetActivationDescriptor

Yes

Yes

cudnnDestroyActivationDescriptor

Yes

Yes

cudnnActivationForward

Yes

Yes

cudnnCreateDropoutDescriptor

Yes

Yes

cudnnDestroyDropoutDescriptor

Yes

Yes

cudnnDropoutGetStatesSize

Yes

Yes

cudnnDropoutGetReserveSpaceSize

Yes

Yes

cudnnSetDropoutDescriptor

Yes

Yes

cudnnRestoreDropoutDescriptor

Yes

Yes

cudnnGetDropoutDescriptor

Yes

Yes

cudnnDropoutForward

Yes

Yes

cudnnSoftmaxForward

Yes

Yes

cudnnAddTensor

Yes

Yes

cudnnScaleTensor

Yes

Yes

cudnnOpTensor

Yes

Yes

cudnnTransformTensor

Yes

Yes

cudnnCreateTensorTransformDescriptor

Yes

Yes

cudnnDestroyTensorTransformDescriptor

Yes

Yes

cudnnSetTensorTransformDescriptor

Yes

Yes

cudnnGetTensorTransformDescriptor

Yes

Yes

cudnnTransformTensorEx

Yes

Yes

cudnnInitTransformDest

Yes

Yes

cudnnTransformFilter

Yes

Yes

cudnnCreateReduceTensorDescriptor

Yes

Yes

cudnnDestroyReduceTensorDescriptor

Yes

Yes

cudnnSetReduceTensorDescriptor

Yes

Yes

cudnnGetReduceTensorDescriptor

Yes

Yes

cudnnReduceTensor

Yes

Yes

cudnnGetReductionWorkspaceSize

Yes

Yes

cudnnGetReductionIndicesSize

Yes

Yes

cudnnCreateLRNDescriptor

Yes

Yes

cudnnDestroyLRNDescriptor

Yes

Yes

cudnnGetLRNDescriptor

Yes

Yes

cudnnSetLRNDescriptor

Yes

Yes

cudnnLRNCrossChannelForward

Yes

Yes

cudnnCreateSpatialTransformerDescriptor

Yes

Yes

cudnnDestroySpatialTransformerDescriptor

Yes

Yes

cudnnSetSpatialTransformerNdDescriptor

Yes

Yes

cudnnSpatialTfGridGeneratorForward

Yes

Yes

cudnnSpatialTfSamplerForward

Yes

Yes

cudnnOpsInferVersionCheck

Yes

Yes

cudnnGetBatchNormalizationForwardTrainingExWorkspaceSize

Yes

Yes

cudnnGetBatchNormalizationBackwardExWorkspaceSize

Yes

Yes

cudnnGetBatchNormalizationTrainingExReserveSpaceSize

Yes

Yes

cudnnBatchNormalizationForwardTraining

Yes

Yes

cudnnBatchNormalizationForwardTrainingEx

Yes

Yes

cudnnBatchNormalizationBackward

Yes

Yes

cudnnBatchNormalizationBackwardEx

Yes

Yes

cudnnPoolingBackward

Yes

Yes

cudnnActivationBackward

Yes

Yes

cudnnDropoutBackward

Yes

Yes

cudnnSoftmaxBackward

Yes

Yes

cudnnLRNCrossChannelBackward

Yes

Yes

cudnnSpatialTfSamplerBackward

Yes

Yes

cudnnSpatialTfGridGeneratorBackward

Yes

Yes

cudnnOpsTrainVersionCheck

Yes

Yes

cudnnQueryRuntimeError

Yes

No

Helper function to check for numerical overflows in BN.

cudnnSetTensor

Yes

No

Helper function to set a tensor to a constant value.

cudnnGetPooling2dDescriptor

Yes

No

Helper function to get the pooling Nd descriptor.

cudnnGetPoolingNdDescriptor

Yes

No

cudnnSetActivationDescriptorSwishBeta

Yes

No

Set/get for swish_beta in the activation function.

cudnnGetActivationDescriptorSwishBeta

Yes

No

cudnnCreateAlgorithmDescriptor

Yes

No

Deprecated in cuDNN 8.0.

Operations related to AlgorithmDescriptor parameters.

cudnnSetAlgorithmDescriptor

Yes

No

cudnnGetAlgorithmDescriptor

Yes

No

cudnnCopyAlgorithmDescriptor

Yes

No

cudnnDestroyAlgorithmDescriptor

Yes

No

cudnnCreateAlgorithmPerformance

Yes

No

Operations related to AlgorithmPerformance parameters.

cudnnSetAlgorithmPerformance

Yes

No

cudnnGetAlgorithmPerformance

Yes

No

cudnnDestroyAlgorithmPerformance

Yes

No

cudnnGetAlgorithmSpaceSize

Yes

No

Deprecated in cuDNN 8.0.

Storage for algorithm metadata.

cudnnSaveAlgorithm

Yes

No

cudnnRestoreAlgorithm

Yes

No

cudnnSetCallback

Yes

No

Related to callback functions.

cudnnGetCallback

Yes

No

cudnnSetConvolutionReorderType

Yes

No

Set/get for convolution ReorderType.

cudnnGetConvolutionReorderType

Yes

No

cudnnIm2Col

Yes

No

im2Col, constructs forward-related matrices.

cudnnReorderFilterAndBias

Yes

No

Reorders the filter and bias.

cudnnConvolutionBackwardBias

Yes

No

Computes convolution gradient with bias.

cudnnCreateFusedOpsConstParamPack

Yes

No

Related to cudnnFusedOps computation. Can be replaced with backend APIs.

cudnnDestroyFusedOpsConstParamPack

Yes

No

cudnnSetFusedOpsConstParamPackAttribute

Yes

No

cudnnGetFusedOpsConstParamPackAttribute

Yes

No

cudnnCreateFusedOpsVariantParamPack

Yes

No

cudnnDestroyFusedOpsVariantParamPack

Yes

No

cudnnSetFusedOpsVariantParamPackAttribute

Yes

No

cudnnGetFusedOpsVariantParamPackAttribute

Yes

No

cudnnCreateFusedOpsPlan

Yes

No

cudnnDestroyFusedOpsPlan

Yes

No

cudnnMakeFusedOpsPlan

Yes

No

cudnnFusedOpsExecute

Yes

No

cudnnCreatePersistentRNNPlan

Yes

No

Deprecated in cuDNN 8.0.

Operations related to the new RNN Persistent algorithm.

cudnnDestroyPersistentRNNPlan

Yes

No

cudnnSetPersistentRNNPlan

Yes

No

cudnnBuildRNNDynamic

Yes

No

cudnnSetRNNPaddingMode

Yes

No

Deprecated in cuDNN 8.0.

RNN padding-related operations. Can be replaced with acdnnSetRNNDescriptor_v8().

cudnnGetRNNPaddingMode

Yes

No

cudnnRNNForwardInferenceEx

Yes

No

You can call acdnnRNNForward()

cudnnSetRNNAlgorithmDescriptor

Yes

No

Optimizing RNN algorithms

cudnnGetRNNForwardInferenceAlgorithmMaxCount

Yes

No

cudnnFindRNNForwardInferenceAlgorithmEx

Yes

No

cudnnRNNForwardTrainingEx

Yes

No

Deprecated in cuDNN 8.0.

You can use acdnnRNNForward().

cudnnRNNBackwardDataEx

Yes

No

You can use the acdnnRNNBackwardData_v8() function.

cudnnRNNBackwardWeightsEx

Yes

No

You can use acdnnRNNBackwardWeights_v8().

cudnnGetRNNForwardTrainingAlgorithmMaxCount

Yes

No

Optimizing RNN algorithms

cudnnFindRNNForwardTrainingAlgorithmEx

Yes

No

cudnnGetRNNBackwardDataAlgorithmMaxCount

Yes

No

cudnnFindRNNBackwardDataAlgorithmEx

Yes

No

cudnnGetRNNBackwardWeightsAlgorithmMaxCount

Yes

No

cudnnFindRNNBackwardWeightsAlgorithmEx

Yes

No

cudnnMultiHeadAttnBackwardData

Yes

No

MultiHeadAttn backward pass.

cudnnMultiHeadAttnBackwardWeights

Yes

No

cudnnDivisiveNormalizationForward

Yes

No

Forward DivisiveNormalization layer computation.

cudnnDeriveNormTensorDescriptor

Yes

No

Exports normalization layer tensor descriptor.

cudnnNormalizationForwardInference

Yes

No

Forward Normalization layer computation.

cudnnDivisiveNormalizationBackward

Yes

No

Backward DivisiveNormalization layer computation.

cudnnGetNormalizationForwardTrainingWorkspaceSize

Yes

No

Normalization layer helper API to get workspace size.

cudnnGetNormalizationBackwardWorkspaceSize

Yes

No

cudnnGetNormalizationTrainingReserveSpaceSize

Yes

No

cudnnNormalizationForwardTraining

Yes

No

Forward Normalization layer computation.

cudnnNormalizationBackward

Yes

No

Computation of the Inverse Normalization Layer

CUDA cuBLAS support status

Compared to cuBLAS 11.9.2, the support status of cuBLAS APIs is shown in the following table:

  • Most commonly used APIs for NN applications are supported and optimized.

  • Compared to Ampere, all APIs can be supported by software. There are currently no PPU hardware limitations. Support will be gradually added in future software versions based on priority.

  • The current API support rate is 89/290, or 30.7%. Unsupported APIs fall into the following main categories:

    • Complex data types: 131

    • Special matrix types (such as symmetric, compressed, and triangular): 36

    • Helper function types (such as set/get and memcpy): 18

    • Batched gemv: 12

    • Uncommon algorithms (matrix addition geam, matrix inversion matinv): 4

  • Because AI applications do not involve complex or special matrix types, the API support rate for AI applications is 89/123, or 72.4%.

cuBLAS API support status

API

cuBLAS 11.9.2

PPU 1.4

cublasCreate_v2

Yes

Yes

cublasDestroy_v2

Yes

Yes

cublasGetProperty

Yes

Yes

cublasSetStream_v2

Yes

Yes

cublasGetStream_v2

Yes

Yes

cublasGetMathMode

Yes

Yes

cublasSetMathMode

Yes

Yes

cublasGetPointerMode_v2

Yes

Yes

cublasSetPointerMode_v2

Yes

Yes

cublasSetWorkspace_v2

Yes

Yes

cublasGetStatusString

Yes

Yes

cublasIamaxEx

Yes

Yes

cublasIsamax_v2

Yes

Yes

cublasIdamax_v2

Yes

Yes

cublasIaminEx

Yes

Yes

cublasIsamin_v2

Yes

Yes

cublasIdamin_v2

Yes

Yes

cublasAsumEx

Yes

Yes

cublasSasum_v2

Yes

Yes

cublasDasum_v2

Yes

Yes

cublasAxpyEx

Yes

Yes

cublasSaxpy_v2

Yes

Yes

cublasDaxpy_v2

Yes

Yes

cublasCopyEx

Yes

Yes

cublasScopy_v2

Yes

Yes

cublasDcopy_v2

Yes

Yes

cublasDotEx

Yes

Yes

cublasSdot_v2

Yes

Yes

cublasDdot_v2

Yes

Yes

cublasNrm2Ex

Yes

Yes

cublasSnrm2_v2

Yes

Yes

cublasDnrm2_v2

Yes

Yes

cublasRotEx

Yes

Yes

cublasSrot_v2

Yes

Yes

cublasDrot_v2

Yes

Yes

cublasRotgEx

Yes

Yes

cublasSrotg_v2

Yes

Yes

cublasDrotg_v2

Yes

Yes

cublasRotmEx

Yes

Yes

cublasSrotm_v2

Yes

Yes

cublasDrotm_v2

Yes

Yes

cublasRotmgEx

Yes

Yes

cublasSrotmg_v2

Yes

Yes

cublasDrotmg_v2

Yes

Yes

cublasScalEx

Yes

Yes

cublasSscal_v2

Yes

Yes

cublasDscal_v2

Yes

Yes

cublasSwapEx

Yes

Yes

cublasSswap_v2

Yes

Yes

cublasDswap_v2

Yes

Yes

cublasSgemv_v2

Yes

Yes

cublasDgemv_v2

Yes

Yes

cublasSgemm_v2

Yes

Yes

cublasDgemm_v2

Yes

Yes

cublasHgemm

Yes

Yes

cublasSgemmEx

Yes

Yes

cublasGemmEx

Yes

Yes

cublasHgemmBatched

Yes

Yes

cublasSgemmBatched

Yes

Yes

cublasGemmBatchedEx

Yes

Yes

cublasGemmStridedBatchedEx

Yes

Yes

cublasSgemmStridedBatched

Yes

Yes

cublasDgemmBatched

Yes

Yes

cublasDgemmStridedBatched

Yes

Yes

cublasHgemmStridedBatched

Yes

Yes

cublasSgetrfBatched

Yes

Yes

cublasDgetrfBatched

Yes

Yes

cublasSgetrsBatched

Yes

Yes

cublasDgetrsBatched

Yes

Yes

cublasSger_v2

Yes

Yes

cublasDger_v2

Yes

Yes

cublasSsyr_v2

Yes

Yes

cublasDsyr_v2

Yes

Yes

cublasSspr_v2

Yes

Yes

cublasDspr_v2

Yes

Yes

cublasSsyr2_v2

Yes

Yes

cublasDsyr2_v2

Yes

Yes

cublasSspr2_v2

Yes

Yes

cublasDspr2_v2

Yes

Yes

cublasStrsm_v2

Yes

Yes

cublasDtrsm_v2

Yes

Yes

cublasStrsmBatched

Yes

Yes

cublasDtrsmBatched

Yes

Yes

cublasSgetriBatched

Yes

Yes

cublasDgetriBatched

Yes

Yes

cublasSgeqrfBatched

Yes

Yes

cublasDgeqrfBatched

Yes

Yes

cublasSgelsBatched

Yes

Yes

cublasDgelsBatched

Yes

Yes

cublasGetVersion_v2

Yes

No

cublasGetCudartVersion

Yes

No

cublasGetAtomicsMode

Yes

No

cublasSetAtomicsMode

Yes

No

cublasGetSmCountTarget

Yes

No

cublasSetSmCountTarget

Yes

No

cublasGetStatusName

Yes

No

cublasLoggerConfigure

Yes

No

cublasSetLoggerCallback

Yes

No

cublasGetLoggerCallback

Yes

No

cublasSetVector

Yes

No

cublasGetVector

Yes

No

cublasSetMatrix

Yes

No

cublasGetMatrix

Yes

No

cublasSetVectorAsync

Yes

No

cublasGetVectorAsync

Yes

No

cublasSetMatrixAsync

Yes

No

cublasGetMatrixAsync

Yes

No

cublasSgemvBatched

Yes

No

cublasDgemvBatched

Yes

No

cublasCgemvBatched

Yes

No

cublasZgemvBatched

Yes

No

cublasHSHgemvBatched

Yes

No

cublasHSSgemvBatched

Yes

No

cublasTSTgemvBatched

Yes

No

cublasTSSgemvBatched

Yes

No

cublasSgemvStridedBatched

Yes

No

cublasDgemvStridedBatched

Yes

No

cublasCgemvStridedBatched

Yes

No

cublasZgemvStridedBatched

Yes

No

cublasHSHgemvStridedBatched

Yes

No

cublasHSSgemvStridedBatched

Yes

No

cublasTSTgemvStridedBatched

Yes

No

cublasTSSgemvStridedBatched

Yes

No

cublasScnrm2_v2

Yes

No

cublasDznrm2_v2

Yes

No

cublasDotcEx

Yes

No

cublasCdotu_v2

Yes

No

cublasCdotc_v2

Yes

No

cublasZdotu_v2

Yes

No

cublasZdotc_v2

Yes

No

cublasCscal_v2

Yes

No

cublasCsscal_v2

Yes

No

cublasZscal_v2

Yes

No

cublasZdscal_v2

Yes

No

cublasCaxpy_v2

Yes

No

cublasZaxpy_v2

Yes

No

cublasCcopy_v2

Yes

No

cublasZcopy_v2

Yes

No

cublasCswap_v2

Yes

No

cublasZswap_v2

Yes

No

cublasIcamax_v2

Yes

No

cublasIzamax_v2

Yes

No

cublasIcamin_v2

Yes

No

cublasIzamin_v2

Yes

No

cublasScasum_v2

Yes

No

cublasDzasum_v2

Yes

No

cublasCrot_v2

Yes

No

cublasCsrot_v2

Yes

No

cublasZrot_v2

Yes

No

cublasZdrot_v2

Yes

No

cublasCrotg_v2

Yes

No

cublasZrotg_v2

Yes

No

cublasCgemv_v2

Yes

No

cublasZgemv_v2

Yes

No

cublasCgemm_v2

Yes

No

cublasCgemm3m

Yes

No

cublasCgemm3mEx

Yes

No

cublasZgemm_v2

Yes

No

cublasZgemm3m

Yes

No

cublasCgemmEx

Yes

No

cublasCgemmBatched

Yes

No

cublasCgemm3mBatched

Yes

No

cublasZgemmBatched

Yes

No

cublasCgemmStridedBatched

Yes

No

cublasCgemm3mStridedBatched

Yes

No

cublasZgemmStridedBatched

Yes

No

cublasCgetrfBatched

Yes

No

cublasZgetrfBatched

Yes

No

cublasCgetrsBatched

Yes

No

cublasZgetrsBatched

Yes

No

cublasSgbmv_v2

Yes

No

cublasDgbmv_v2

Yes

No

cublasCgbmv_v2

Yes

No

cublasZgbmv_v2

Yes

No

cublasStrmv_v2

Yes

No

cublasDtrmv_v2

Yes

No

cublasCtrmv_v2

Yes

No

cublasZtrmv_v2

Yes

No

cublasStbmv_v2

Yes

No

cublasDtbmv_v2

Yes

No

cublasCtbmv_v2

Yes

No

cublasZtbmv_v2

Yes

No

cublasStpmv_v2

Yes

No

cublasDtpmv_v2

Yes

No

cublasCtpmv_v2

Yes

No

cublasZtpmv_v2

Yes

No

cublasStrsv_v2

Yes

No

cublasDtrsv_v2

Yes

No

cublasCtrsv_v2

Yes

No

cublasZtrsv_v2

Yes

No

cublasStpsv_v2

Yes

No

cublasDtpsv_v2

Yes

No

cublasCtpsv_v2

Yes

No

cublasZtpsv_v2

Yes

No

cublasStbsv_v2

Yes

No

cublasDtbsv_v2

Yes

No

cublasCtbsv_v2

Yes

No

cublasZtbsv_v2

Yes

No

cublasSsymv_v2

Yes

No

cublasDsymv_v2

Yes

No

cublasCsymv_v2

Yes

No

cublasZsymv_v2

Yes

No

cublasChemv_v2

Yes

No

cublasZhemv_v2

Yes

No

cublasSsbmv_v2

Yes

No

cublasDsbmv_v2

Yes

No

cublasChbmv_v2

Yes

No

cublasZhbmv_v2

Yes

No

cublasSspmv_v2

Yes

No

cublasDspmv_v2

Yes

No

cublasChpmv_v2

Yes

No

cublasZhpmv_v2

Yes

No

cublasCgeru_v2

Yes

No

cublasCgerc_v2

Yes

No

cublasZgeru_v2

Yes

No

cublasZgerc_v2

Yes

No

cublasCsyr_v2

Yes

No

cublasZsyr_v2

Yes

No

cublasCher_v2

Yes

No

cublasZher_v2

Yes

No

cublasChpr_v2

Yes

No

cublasZhpr_v2

Yes

No

cublasCsyr2_v2

Yes

No

cublasZsyr2_v2

Yes

No

cublasCher2_v2

Yes

No

cublasZher2_v2

Yes

No

cublasChpr2_v2

Yes

No

cublasZhpr2_v2

Yes

No

cublasSsyrk_v2

Yes

No

cublasDsyrk_v2

Yes

No

cublasCsyrk_v2

Yes

No

cublasZsyrk_v2

Yes

No

cublasCsyrkEx

Yes

No

cublasCsyrk3mEx

Yes

No

cublasCherk_v2

Yes

No

cublasZherk_v2

Yes

No

cublasCherkEx

Yes

No

cublasCherk3mEx

Yes

No

cublasSsyr2k_v2

Yes

No

cublasDsyr2k_v2

Yes

No

cublasCsyr2k_v2

Yes

No

cublasZsyr2k_v2

Yes

No

cublasCher2k_v2

Yes

No

cublasZher2k_v2

Yes

No

cublasSsyrkx

Yes

No

cublasDsyrkx

Yes

No

cublasCsyrkx

Yes

No

cublasZsyrkx

Yes

No

cublasCherkx

Yes

No

cublasZherkx

Yes

No

cublasSsymm_v2

Yes

No

cublasDsymm_v2

Yes

No

cublasCsymm_v2

Yes

No

cublasZsymm_v2

Yes

No

cublasChemm_v2

Yes

No

cublasZhemm_v2

Yes

No

cublasCtrsm_v2

Yes

No

cublasZtrsm_v2

Yes

No

cublasStrmm_v2

Yes

No

cublasDtrmm_v2

Yes

No

cublasCtrmm_v2

Yes

No

cublasZtrmm_v2

Yes

No

cublasSgeam

Yes

No

cublasDgeam

Yes

No

cublasCgeam

Yes

No

cublasZgeam

Yes

No

cublasCgetriBatched

Yes

No

cublasZgetriBatched

Yes

No

cublasCtrsmBatched

Yes

No

cublasZtrsmBatched

Yes

No

cublasSmatinvBatched

Yes

No

cublasDmatinvBatched

Yes

No

cublasCmatinvBatched

Yes

No

cublasZmatinvBatched

Yes

No

cublasCgeqrfBatched

Yes

No

cublasZgeqrfBatched

Yes

No

cublasCgelsBatched

Yes

No

cublasZgelsBatched

Yes

No

cublasSdgmm

Yes

No

cublasDdgmm

Yes

No

cublasCdgmm

Yes

No

cublasZdgmm

Yes

No

cublasStpttr

Yes

No

cublasDtpttr

Yes

No

cublasCtpttr

Yes

No

cublasZtpttr

Yes

No

cublasStrttp

Yes

No

cublasDtrttp

Yes

No

cublasCtrttp

Yes

No

cublasZtrttp

Yes

No