카메라에서 가져온 일련의 이미지가 있고이 이미지를 CUDA 장치 메모리에 저장하고 OpenGL을 사용하여 렌더링해야합니다. 이러한 이미지는 연속적으로 버퍼에 저장해야합니다. 내가 가진CUDA - 쓰레드 사용법 - 하나의 이미지를 다른 이미지로 버퍼에 복사하기
질문은 다음과 같습니다
- 내가 올바른 스레드 할당을해야합니까 어떻게 버퍼에 저장해야 할 10 개 개의 이미지,이 있으라?
- 내가 작성한 프로그램이 정확한지 알고 싶습니다.
나는 커널 코드 만 붙여 넣었습니다. 나는 별도로 호스트 코드에 Buffer
및 EnergyImg
메모리를 할당 :
const unsigned int tidx = blockDim.x * blockIdx.x + threadIdx.x;
const unsigned int tidy = blockDim.y * blockIdx.y + threadIdx.y;
const unsigned int adx = tidx + tidy * blockDim.x * gridDim.x;
const unsigned int bdx = adx;
int TotalFrames = 10;
for(int a = 1; a<=TotalFrames; a++)
{
int SingleFrame = (m_ImageHeight * m_ImageWidth);
int CurrentFrame = a * (m_ImageHeight * m_ImageWidth);
// (first/next) frame is stored till the end of this value
int PreviousFrame = (a-1) * (m_ImageHeight * m_ImageWidth);
// next frame will be stored in memory from the end of previous frame
if ( (a==1))
{
if (adx < CurrentFrame)
{
Buffer[adx] = EnergyImg[adx];
}
}
else if((a > 1) && (a <= TotalFrames))
{
if(((adx > PreviousFrame) && (adx <= CurrentFrame)))
{
while (bdx < SingleFrame)
{
Buffer[adx] = EnergyImg[bdx];
}
}
}
}
왜 코드를 실행하고 볼 수 없습니다 먼저 올바른 결과를 산출한다면? –
나는했다. 디버깅과 릴리스 모두에서 완벽하게 컴파일되고 빌드됩니다. 그러나 실시간으로 처리하고 렌더링하려고하면 액세스 위반 오류가 발생합니다. 아마도 버퍼에 저장되는 입력이 없으므로 렌더링 할 것이 없기 때문일 것입니다. – Eagle