I’m attempting to create some shareable memory that can be used for CUarrays. However when I call cuMemCreate with both the requestedHandleTypes set to CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR
and the allocFlags.usage set to CU_MEM_CREATE_USAGE_TILE_POOL
, cuMemCreate returns a CUDA_ERROR_INVALID_VALUE
error.
Without CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR
cuMemExportToShareableHandle won’t work, and without CU_MEM_CREATE_USAGE_TILE_POOL
cuMemMapArrayAsync won’t work, so both are needed.
Is this combination possible?
CUDA_ARRAY3D_DESCRIPTOR arrDesc = {
.Width = width,
.Height = height,
.Depth = 0,
.NumChannels = 1,
.Flags = CUDA_ARRAY3D_DEFERRED_MAPPING,
.Format = CU_AD_FORMAT_UNSIGNED_INT8
};
CUarray arr;
checkCudaErrors(cuArray3DCreate(&arr, &arrDesc));
CUDA_ARRAY_MEMORY_REQUIREMENTS memoryRequirements;
checkCudaErrors(cuArrayGetMemoryRequirements(&memoryRequirements, arr, 0));
CUmemGenericAllocationHandle mem;
CUmemAllocationProp props = {
.type = CU_MEM_ALLOCATION_TYPE_PINNED,
.requestedHandleTypes = CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR,
.location.type = CU_MEM_LOCATION_TYPE_DEVICE,
.location.id = 0,
.allocFlags.usage = CU_MEM_CREATE_USAGE_TILE_POOL
};
size_t granularity = 0;
cuMemGetAllocationGranularity(&granularity, &props, CU_MEM_ALLOC_GRANULARITY_RECOMMENDED);
size_t padded_size = ROUND_UP(memoryRequirements.size, granularity);
checkCudaErrors(cuMemCreate(&mem, padded_size, &props, 0));