首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA 1-D数组未更新

CUDA 1-D数组未更新
EN

Stack Overflow用户
提问于 2013-05-09 01:18:52
回答 1查看 327关注 0票数 0

这是我第一次尝试一个CUDA项目。这就是它应该做的:

  1. 从主机内存接收一维像素数组
  2. 每个像素由一个线程处理:它是线程安全的,因为只有"val“被读取,只有"newval”被更新。等待同步。
  3. 每个像素由一个线程处理:将"newval“复制到”val“。
  4. 将此数组写回主机内存。
  5. 对几个不同的帧重复2-4。

然而,在新数组中的大约32000个变量中,只有几个变量似乎有很好的值,其余的则为零。

为了简洁起见,我去掉了计算。

代码语言:javascript
复制
__global__ void kernel(Pixel *array, float dt)
{
    const unsigned int tid = threadIdx.x;
    Pixel *point = array + tid;
    //DO A BUNCH OF CALCULATIONS ON PIXEL KIND OF LIKE THIS
    point->newval = point->val + foo;
}

__global__ void copykernel(Pixel *array)
{
    const unsigned int tid = threadIdx.x;
    Pixel *point = array + tid;
    //COPY THE NEWVALS OVER TO THE OLD VALS IN PREPARATION FOR THE NEXT FRAME
    point->val = point->newval;
}

extern "C" bool runIt(const int argc, const char **argv, Pixel *inarray, Pixel **outarrays, int arraysize, int numframes, float dt)
{
    int memsize = arraysize*sizeof(Pixel);
    int i=0;

    Pixel *array;
    cudaMalloc((void **) &array, memsize);
    cudaMemcpy(array, inarray, memsize, cudaMemcpyHostToDevice);

    int numthreads = arraysize;
    dim3 grid(1,1,1);
    dim3 threads(numthreads,1,1);

    for(i=0;i<numframes;i++)
    {
        kernel<<<grid, threads>>>((Pixel *) array, dt);
        cudaThreadSynchronize();
        copykernel<<<grid, threads>>>((Pixel *) array);
        cudaThreadSynchronize();
        cudaMemcpy(array, outarrays[i], memsize, cudaMemcpyDeviceToHost);
    }
    cudaFree(array);
    return true;
}

我怀疑我设置了设备的参数不正确,否则我会把一个特定于设备的关键字搞错或者忘记了关键的一步。有什么东西向你扑来吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-09 01:24:28

我不认为你能运行那么多线程,如果可以的话,这不是一个好主意。尝试将线程数设置为256 (2D为16x16),然后根据输入大小选择网格大小。

代码语言:javascript
复制
dim3 threads(256,1,1);
dim3 grid(arraysize/threads.x,1,1); //Careful of integer division, this is just for example

另外,您的第二份副本是不正确的。您需要切换arrayout_arrays

代码语言:javascript
复制
cudaMemcpy(outarrays[i], array, memsize, cudaMemcpyDeviceToHost);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16452825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档