在 nvcuda.dll 中找不到 cudaDeviceSynchronize()

问题描述 投票:0回答:1

我正在编写 CUDA 代码,在 VS2022 中使用 nvcc 进行编译,生成 PTX 文件,然后从 Embarcadero Delphi 运行 CUDA 代码。为了从 Delphi 运行 CUDA 内核,我编写了一个 nvcuda.dll 的 API,它运行得很好。例如,我使用 cuInit、cuMemAlloc、cuLaunchKernel、cuMemcpyDtoH_v2、cuMemcpyHtoD_v2 等函数没有任何问题,所有这些都根据 CUDA Runtime API。

但是,我一直无法在nvcuda.dll(或libcuda.so)中找到cudaDeviceSynchronize()。虽然cudaDeviceSynchronize()存在于大多数由nvcc编译的CUDA演示程序中,但它似乎不存在于DLL中。

如何让CPU使用API(即不是nvcc编译的C程序)等待CUDA内核?

parallel-processing cuda nvcc
1个回答
0
投票

...使用

cuInit
cuMemAlloc
cuLaunchKernel
cuMemcpyDtoH_v2
cuMemcpyHtoD_v2
等函数没有任何问题,全部根据 CUDA Runtime API

这些不是运行时 API 函数,而是驱动程序 API 函数。你之所以在 NVCUDA.DLL 中找到它们,是因为该库是 Windows 上的驱动程序 API 提供者。

你找不到

CudaDeviceSynchronize
的原因是因为它一个运行时API函数。如果您实际上使用驱动程序 API,则等效函数将是
cuCtxSynchronize

© www.soinside.com 2019 - 2024. All rights reserved.