我有一组来自相机的图像,我需要将这些图像存储在CUDA设备内存中并使用OpenGL进行渲染。这些图像必须一个接一个地连续存储在缓冲区中。
我的问题是:
我只粘贴了内核代码;我分别在主机代码中为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];
}
}
}
}
答案 0 :(得分:1)
这段代码看起来很破碎,但你可能也在咆哮错误的树。
我认为此代码存在许多可能的问题。举个例子,像这样的结构几乎肯定会被打破:
while ( bdx < SingleFrame)
{
Buffer[adx] = EnergyImg[bdx];
}
请考虑此代码是否可以保证导致无限循环。别介意CUDA或GPU。如果这是直接的C代码,在什么情况下while
循环一旦进入,实际上会退出? bdx
肯定是不可修改的,因为您已使用const
声明它。如果bdx
满足while条件一次,它将永远满足while条件(因为你的while循环中的任何内容或代码中的任何位置都不会修改SingleFrame
,一旦它的值建立起来。)