怎样以加载动态链接库的方式显式调用libcudartso中的__cudaPushCallConfiguration和__cudaPopCallConfiguration
要以加载动态链接库的方式显式调用libcudart.so中的__cudaPushCallConfiguration和__cudaPopCallConfiguration,需要按照以下步骤:
- 加载libcudart.so动态链接库。
import ctypes
libcudart = ctypes.CDLL("libcudart.so")
- 定义__cudaPushCallConfiguration和__cudaPopCallConfiguration的参数类型和返回值类型。
cudaFuncAttributes = ctypes.c_void_p # void*
blockDim = ctypes.c_int * 3
gridDim = ctypes.c_int * 3
sharedMem = ctypes.c_size_t
stream = ctypes.c_void_p # cudaStream_t
- 调用__cudaPushCallConfiguration函数。
def cudaPushCallConfiguration(func, gridDim, blockDim, sharedMem=0, stream=None):
func = ctypes.c_void_p(func) # void*
gridDim = gridDim(*gridDim)
blockDim = blockDim(*blockDim)
sharedMem = sharedMem # size_t
stream = stream if stream is not None else 0 # cudaStream_t
libcudart.__cudaPushCallConfiguration(func, gridDim, blockDim, sharedMem, stream)
- 调用__cudaPopCallConfiguration函数。
def cudaPopCallConfiguration(func):
func = ctypes.c_void_p(func) # void*
libcudart.__cudaPopCallConfiguration(func)
注意:在调用__cudaPushCallConfiguration和__cudaPopCallConfiguration函数时,需要传入当前CUDA上下文中的函数指针作为参数
原文地址: https://www.cveoy.top/t/topic/gpnE 著作权归作者所有。请勿转载和采集!