- После readImage() , память процесса показывает 12,5 ГБ. Почему изображения размером 3,52 ГБ занимают так много памяти? Как его уменьшить?
Я пытался оптимизировать ядро, и сейчас это мое ядро.
Код: Выделить всё
//it is a global container std::vector gpuImgStack; void readImage(std::string img_path) { cv::Mat original_img; cv::cuda::GpuMat gpuTempImg; for (int i = 0; i < IMG_SIZE; i++) { original_img = cv::imread(img_path + "a1_" + std::to_string(i + 1) + ".BMP"); gpuTempImg.upload(original_img); gpuImgStack.push_back(gpuTempImg); gpuTempImg.release(); original_img.release(); if (gpuImgStack.back().empty()) { printf("Image read failed\n"); exit(-1); } } std::cout = imgWidth - 3) return; double sumX = 0.0, sumY = 0.0, color=0.0; for (int i = -1; i (gpuImgStack[i].ptr(), ML3[i].ptr(), width, height); } cudaDeviceSynchronize(); }
Кроме того, я пытался не использовать эти два контейнера, но это невозможно сделать так, как внутри ядра исходное и конечное изображения будут неправильными.Код: Выделить всё
cv::cuda::GpuMat ML3[IMG_SIZE]; cv::cuda::GpuMat SML3[IMG_SIZE];
Подробнее здесь: https://stackoverflow.com/questions/787 ... ess-memory