zoukankan      html  css  js  c++  java
  • cuda自己常犯的傻逼错误

    1.使用shared memory时如果申明

    __shared__ myshared;

    在使用kernel函数时不需要指明shared的大小

    如果使用

    extern __shared__ myshared;

    需要再使用kernel时再<<<>>>中指明所使用的sharedmemory的大小.

    2.没有为申明的device变量申请空间

    再运行cuda代码的时候,如果没有使用检错函数,对于没有为在GPU中使用的内存使用

    cudamalloc分配存储空间的时候,代码可以编译通过,并且可以运行,成功,但实际上并没有

    发起kernel函数,最后导致的结果就是我们看到结果时错误的,但是却不知道错误再哪里

    所以发现没有得到kernel运行后期望的输出时首先检错device'上的内醋是否分配了

    或者输出的结果

    3.

    __syncthreads(); }
    if (tid < 32) {
    if (blockSize >= 64) sdata[tid] += sdata[tid + 32];//for every time a warp to execute one instruction
    __syncthreads();
    if (blockSize >= 32) sdata[tid] += sdata[tid + 16];
    __syncthreads();
    if (blockSize >= 16) sdata[tid] += sdata[tid + 8];
    __syncthreads();
    if (blockSize >= 8) sdata[tid] += sdata[tid + 4];
    __syncthreads();
    if (blockSize >= 4) sdata[tid] += sdata[tid + 2];
    __syncthreads();
    if (blockSize >= 2) sdata[tid] += sdata[tid + 1];
    __syncthreads();
    }
    if (tid == 0) c[blockIdx.x] = sdata[0];

    在进行reduction的时候我们将循环展开,消除线程对齐带来的麻烦.

  • 相关阅读:
    9-day9-生成器-列表解析-三元表达式-
    8-day8-列表解析-装饰器-迭代器
    7-day7-闭包函数-装饰器-函数2
    6-day6-函数-1
    5-day5-字符编码-函数-文件操作
    hive 跨年周如何处理
    nginx 安装部署
    logstash 读取kafka output ES
    leedcode 001 之 Two Sum 42.20% Easy
    大数据调度与数据质量的重要性
  • 原文地址:https://www.cnblogs.com/Erdos001/p/4496245.html
Copyright © 2011-2022 走看看