지포스 GTX 1080 TI 및 \ 또는 GeForce GTX 1080 GPU에서 cudaMallocPitch API를 사용하는 중에 '메모리 부족'오류가 발생합니다. 는 4 개의 GPU (1 1080 TI 및 3 1080)와 2 개의 CPU를 포함하는 전체 PC 서버의 일부입니다.cudaMallocPitch는 메모리가 충분하지 않아도 분리 된 CPU 프로세스로 멀티 GPU를 제어하는 동안 실패합니다.
각 GPU는 전용 CPU 스레드에 의해 제어됩니다.이 CPU 스레드는 실행이 시작될 때 올바른 장치 인덱스로 cudaSetDevice를 호출합니다.
구성 파일 정보를 기반으로 응용 프로그램은 얼마나 많은 CPU 스레드를 만들어야하는지 알 수 있습니다.
각 응용 프로그램이 서로 다른 GPU를 제어하는 분리 된 프로세스로 여러 번 응용 프로그램을 실행할 수도 있습니다.
이미지 백그라운드 뺄셈을 수행하기 위해 OpenCV 버전 3.2를 사용하고 있습니다.
먼저,이 메소드를 사용하여 BackgroundSubtractorMOG2 객체를 생성해야합니다 : cv :: cuda :: createBackgroundSubtractorMOG2 그리고 그 후에 apply 메소드를 호출해야합니다.
첫 번째 적용 방법은 모든 필요한 메모리가 한 번 할당됩니다.
내 이미지 크기는 10000 열과 7096 행입니다. 각 픽셀은 1B (그레이 스케일)입니다.
여러 개의 스레드 (각 GPU마다 하나씩)가있는 하나의 프로세스로 응용 프로그램을 실행할 때 모든 것이 잘 작동하지만 OpenCV 적용 함수가 시작되는 분리 된 프로세스 (각 GPU마다 하나씩)로 4 번 실행하면 cudaMallocPitch '메모리 부족'오류로 인해 실패합니다.
모든 GPU에 대해 처음 적용하기 전에 사용 가능한 메모리가 충분한 것으로 확인되었습니다. 1080의 경우 5.5GB, 1080 TI의 경우 8.3GB, 요청 된 크기는 width - 120000bytes, Height - 21288bytes - 2.4GB입니다.
알려 주시기 바랍니다.
마지막 질문과 어떻게 다른가요? – talonmies
이 질문은 내 진짜 문제입니다. 조사의 일환으로 나는 이전 질문에 의해 표현 된보다 간단한 논리로 그것을 재현하려고 시도했다. 실수로 나는 완전히 괜찮은지 보지 못했습니다. 내 테스트가 괜찮다는 것을 알게 된 후 나는 내 진짜 문제에 대해 물어보기로했습니다. – OronG
당신은 우리가 당신의 말을 디버깅 할 수 있도록 도와 주시겠습니까? 문제의 코드를 보지 않고서 어떤 일이 잘못 될지 누가 말할 수 있습니까? – talonmies