ImagePublisher()
: Node("image_publisher")
{
Mat img(1920, 1080, CV_8UC3);
randu(img, Scalar(0, 0, 0), Scalar(255, 255, 255));
imwrite("publish.jpg", img);
int devCount;
void *ptr = NULL;
cudaIpcMemHandle_t memHandle;
checkCudaErrors(cudaGetDeviceCount(&devCount));
RCLCPP_INFO(this->get_logger(), "%d", devCount);
checkCudaErrors(cudaSetDevice(0));
cudaDeviceProp prop;
checkCudaErrors(cudaGetDeviceProperties(&prop, 0));
if (!prop.unifiedAddressing) {
RCLCPP_INFO(this->get_logger(), "Device 0 does not support unified addressing");
}
if (prop.computeMode != cudaComputeModeDefault) {
RCLCPP_INFO(this->get_logger(), "Device 0 is an unsupported compute mode for this");
}
size_t count = 1920 * 1080 * 3;
checkCudaErrors(cudaMalloc(&ptr, count));
checkCudaErrors(cudaMemcpy(ptr, (const void*)img.data, count, cudaMemcpyHostToDevice));
checkCudaErrors(cudaIpcGetMemHandle(&memHandle, (void*)ptr));
uint8_t* byte_array = reinterpret_cast<uint8_t*>(&memHandle);
void* ptr2 = NULL;
checkCudaErrors(cudaIpcOpenMemHandle(&ptr2, memHandle, cudaIpcMemLazyEnablePeerAccess));
error happened in cudaIpcOpenMemHandle, and I check, cudaGetDeviceCount return 2, I don’t even use IPC in different process, but i get invalid device context from cudaIpcOpenMemHandle…