Всего у меня 811 изображений с разрешением RGB каждого 1440x1080. Следовательно итого 3,52 ГБ. Я использую CUDA v12.2, графический процессор NVIDIA RTX 3090 и Visual Studio 2019. Я столкнулся с двумя проблемами
После 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();
}
Я пытался оптимизировать ядро, и сейчас это мое ядро.
Кроме того, я пытался не использовать эти два контейнера, но это невозможно сделать так, как внутри ядра исходное и конечное изображения будут неправильными.
Всего у меня 811 изображений с разрешением RGB каждого 1440x1080. Следовательно итого 3,52 ГБ. Я использую CUDA v12.2, графический процессор NVIDIA RTX 3090 и Visual Studio 2019. Я столкнулся с двумя проблемами [list] [*]После readImage() , память процесса показывает 12,5 ГБ. Почему изображения размером 3,52 ГБ занимают так много памяти? Как его уменьшить? [code]//it is a global container std::vector gpuImgStack;
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(); } [/code] Я пытался оптимизировать ядро, и сейчас это мое ядро. Кроме того, я пытался не использовать эти два контейнера, но это невозможно сделать так, как внутри ядра исходное и конечное изображения будут неправильными. [code]cv::cuda::GpuMat ML3[IMG_SIZE]; cv::cuda::GpuMat SML3[IMG_SIZE]; [/code]
Для кода, упомянутого в сообщении, это функция __nv_cudaEntityRegisterCallback, внедренная компилятором nvcc, которая регистрирует имя/символ ядра на стороне хоста ((void (*)(double*, double*, double* , int))vecAdd) с символом _Z6vecAddPdS_S_i на...
Примечание. Если сообщение кажется длинным, можно сразу перейти к разделу, начинающемуся с «Мне было интересно..» в конце, на случай, если вы захотите пропустить сборку/контекст.
Сборка/контекст:
Для кода, упомянутого в сообщении, это — это...
Примечание. Если сообщение кажется длинным, можно сразу перейти к разделу, начинающемуся с «Мне было интересно..» в конце, на случай, если вы захотите пропустить сборку/контекст.
Сборка/контекст:
Для кода, упомянутого в сообщении, это — это...
](
sstatic.net/H3JmrldO.png
)
Для отладки рассмотрите возможность передачи CUDA_LAUNCH_BLOCKING=1
Скомпилируйте с TORCH_USE_CUDA_DSA, чтобы включить утверждения на стороне устройства.
Я тренирую YOLOv8 определять атрибуты одежды. Изображения...