zoukankan      html  css  js  c++  java
  • Cuda总结

    1、名词解释:

    CUDANVIDIA公司提出了一种通用的并行计算平台和编程模型。

    2、GPU性能

     

    3、分治思想:

      

    线程格grid

    线程格可以是一维、二维或者三维的,线程格的尺寸一般根据待处理数据的规模或者处理器的数量来指定。

    一次 kernel launch (就是一次 <<< >>>)生成一张 grid

    同一个 grid 中采用多个 block,再在一个 block 中分多个 thread,但是在单次kernel 调用中,grid 就是最大的单位了,而且只有一个。

    共享 global memory

    4、一维线程格

       kerneladd<<<10, 1000>>>(dev_arr); //将线程格分成10block 每个block1000个线程

       指定特殊线程做特殊的事情,在线程网络中,blockId.x和threadId.x就是对应的block编号和thread编号

    5、二维线程格

       二维数组

    用于线程索引计算的CUDA运行时库提供的变量

    gridDim.x —— 线程网格X维度上线程块的数量

    gridDim.y —— 线程网格Y维度上线程块的数量

    blockDim.x  —— 一个线程块X维度上的线程数量

    blockDim.y  —— 一个线程块Y维度上的线程数量

    threadIdx.x —— 线程块X维度上的线程索引

    threadIdx.y —— 线程块Y维度上的线程索引

    二维线程网格模型下计算当前线程索引:

    idx = (blockIdx.x * blockDim.x) + threadIdx.x;

    idy = (blockIdx.y * blockDim.y) + threadIdx.y;

    threadIdx = idx + idy * blockDim.x * gridDim.x;

    dim3 dimBlock(16,16);
    dim3 dimGrid(8,8);
    myhistKernel<<<dimGrid,dimBlock>>>();

    6、三维线程格

    以此类推 多个Z

       

    7、GPU内存

       数组拷贝到CPU是全局内存

       支持图像高速传输采用纹理内存

       

       详见demo picture.cu

       函数:

       cudaThreadSynchronize()

       主机是单个线程的应用,一般不用加sync。要理解cudaThreadSynchronize的意义(不是sync_threads!!),它是阻塞cpu直到gpu kernel执行完毕。

     

       __syncthreads()

        

    block内部用于线程同步
    就是同一block内所有线程执行至__syncthreads()处等待全部线程执行完毕后再继续

       

     

     

     

  • 相关阅读:
    Excel利用剪贴板或错位引用将多列行数不一的数据复制粘帖到一列 来自:Office之家 链接:http://www.icanzc.com/excel/5246.html
    R语言之避免for循环示例
    R语言之as.numeric(对于factor型转数值型)
    R语言之row_number
    如何在Windows环境下开发Python(转)
    单行代码 之Python 3.5版
    install xgboost package in python (Anaconda)
    汉诺塔,杨辉三角之python实现
    special-symbols in package(data.table)
    R&SQL合并记录并去重
  • 原文地址:https://www.cnblogs.com/132818Creator/p/14899235.html
Copyright © 2011-2022 走看看