当前位置: 首页 > wzjs >正文

联雅网站建设营销型企业网站有哪些

联雅网站建设,营销型企业网站有哪些,wordpress 去掉分类,wordpress 4.9.4 汉化原文需要用nvprof去检查共享内存的事务,受限于nvprof不能使用。 5.2.1 方形共享内存 声明共享内存: shared int tile[N][N]; 因为是方形的内存块,用一个二维线程块访问,2种方法去访问: tile[threadIdx.y][threadIdx.x…

原文需要用nvprof去检查共享内存的事务,受限于nvprof不能使用。

5.2.1 方形共享内存
声明共享内存:
shared int tile[N][N];
因为是方形的内存块,用一个二维线程块访问,2种方法去访问:
tile[threadIdx.y][threadIdx.x]
tile[threadIdx.x][threadIdx.y]

核函数有两个简单操作:
·将全局线程索引按行主序写入到一个二维共享内存数组中
·从共享内存中按行主序读取这些值并将它们存储到全局内存中

#include <cuda_runtime.h>
#include <stdio.h>
#include "../common/common.h"
#include <iostream>#define BDIMX 32
#define BDIMY 32__global__ void warmup(int *out){__shared__ int tile[BDIMY][BDIMX];unsigned int idx = blockIdx.y * blockDim.x + threadIdx.x;// smem storetile[threadIdx.y][threadIdx.x] = idx;__syncthreads();// smem loadout[idx] = tile[threadIdx.y][threadIdx.x];
}__global__ void setRowReadRow(int *out){__shared__ int tile[BDIMY][BDIMX];unsigned int idx = blockIdx.y * blockDim.x + threadIdx.x;// smem storetile[threadIdx.y][threadIdx.x] = idx;__syncthreads();// smem loadout[idx] = tile[threadIdx.y][threadIdx.x];
}__global__ void setColReadCol(int *out){__shared__ int tile[BDIMY][BDIMX];unsigned int idx = blockIdx.y * blockDim.x + threadIdx.x;// smem storetile[threadIdx.x][threadIdx.y] = idx;__syncthreads();// smem loadout[idx] = tile[threadIdx.x][threadIdx.y];
}int main(int argc, char** argv){int dev = 0;cudaSetDevice(dev);cudaDeviceProp deviceprop;CHECK(cudaGetDeviceProperties(&deviceprop,dev));printf("device %d: %s \n", dev, deviceprop.name);std::cout << "Compute Capability: " << deviceprop.major << "." << deviceprop.minor << std::endl;dim3 block(BDIMX, BDIMY);dim3 grid (1,1); //only 1 blockint nElem = BDIMX * BDIMX;int nBytes = nElem * sizeof(int);int *d_A;cudaMalloc((int**) &d_A, nBytes);Timer timer;timer.start();warmup<<<grid,block>>>(d_A);cudaDeviceSynchronize();timer.stop();float elapsedTime = timer.elapsedms();printf("warmup <<<grid (%4d, %4d), block (%4d, %4d)>>> elapsed %f ms \n", grid.x,grid.y, block.x, block.y, elapsedTime);timer.start();setRowReadRow<<<grid,block>>>(d_A);cudaDeviceSynchronize();timer.stop();elapsedTime = timer.elapsedms();printf("setRowReadRow <<<grid (%4d, %4d), block (%4d, %4d)>>> elapsed %f ms \n", grid.x,grid.y, block.x, block.y, elapsedTime);timer.start();setColReadCol<<<grid,block>>>(d_A);cudaDeviceSynchronize();timer.stop();elapsedTime = timer.elapsedms();printf("setColReadCol <<<grid (%4d, %4d), block (%4d, %4d)>>> elapsed %f ms \n", grid.x,grid.y, block.x, block.y, elapsedTime);cudaFree(d_A);cudaDeviceReset();return 0;}

nvcc checkSmemSquare.cu -Xptxas -v -o checkSmemSquare.exe

checkSmemSquare.cu
ptxas info    : 0 bytes gmem
ptxas info    : Compiling entry function '_Z13setColReadColPi' for 'sm_52'
ptxas info    : Function properties for _Z13setColReadColPi0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 6 registers, used 1 barriers, 4096 bytes smem, 328 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13setRowReadRowPi' for 'sm_52'
ptxas info    : Function properties for _Z13setRowReadRowPi0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 6 registers, used 1 barriers, 4096 bytes smem, 328 bytes cmem[0]
ptxas info    : Compiling entry function '_Z6warmupPi' for 'sm_52'
ptxas info    : Function properties for _Z6warmupPi0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 6 registers, used 1 barriers, 4096 bytes smem, 328 bytes cmem[0]
tmpxft_00004be0_00000000-10_checkSmemSquare.cudafe1.cppCreating library checkSmemSquare.lib and object checkSmemSquare.exp

尝试通过NCU查看shared memory transactions
ncu --metrics smsp__sass_inst_executed_op_shared,smsp__sass_inst_executed_op_shared_ld,smsp__sass_inst_executed_op_shared_st checkSmemSquare.exe
没看出来啥区别

setRowReadRow(int *) (1, 1, 1)x(32, 32, 1), Context 1, Stream 7, Device 0, CC 8.9Section: Command line profiler metrics----------------------------------------- ----------- ------------Metric Name                               Metric Unit Metric Value----------------------------------------- ----------- ------------smsp__sass_inst_executed_op_shared.avg           inst         0.12smsp__sass_inst_executed_op_shared.max           inst           16smsp__sass_inst_executed_op_shared.min           inst            0smsp__sass_inst_executed_op_shared.sum           inst           64smsp__sass_inst_executed_op_shared_ld.avg        inst         0.06smsp__sass_inst_executed_op_shared_ld.max        inst            8smsp__sass_inst_executed_op_shared_ld.min        inst            0smsp__sass_inst_executed_op_shared_ld.sum        inst           32smsp__sass_inst_executed_op_shared_st.avg        inst         0.06smsp__sass_inst_executed_op_shared_st.max        inst            8smsp__sass_inst_executed_op_shared_st.min        inst            0smsp__sass_inst_executed_op_shared_st.sum        inst           32----------------------------------------- ----------- ------------setColReadCol(int *) (1, 1, 1)x(32, 32, 1), Context 1, Stream 7, Device 0, CC 8.9Section: Command line profiler metrics----------------------------------------- ----------- ------------Metric Name                               Metric Unit Metric Value----------------------------------------- ----------- ------------smsp__sass_inst_executed_op_shared.avg           inst         0.12smsp__sass_inst_executed_op_shared.max           inst           16smsp__sass_inst_executed_op_shared.min           inst            0smsp__sass_inst_executed_op_shared.sum           inst           64smsp__sass_inst_executed_op_shared_ld.avg        inst         0.06smsp__sass_inst_executed_op_shared_ld.max        inst            8smsp__sass_inst_executed_op_shared_ld.min        inst            0smsp__sass_inst_executed_op_shared_ld.sum        inst           32smsp__sass_inst_executed_op_shared_st.avg        inst         0.06smsp__sass_inst_executed_op_shared_st.max        inst            8smsp__sass_inst_executed_op_shared_st.min        inst            0smsp__sass_inst_executed_op_shared_st.sum        inst           32----------------------------------------- ----------- ------------

5.2.2 按行主序写和按列主序读

__global__ void setRowReadCol(int *out){__shared__ int tile[BDIMY][BDIMX];unsigned int idx = blockIdx.y * blockDim.x + blockIdx.x;// smem storetile[threadIdx.y][threadIdx.x] = idx;__syncthreads();// smem loadout[idx] = tile[threadIdx.x][threadIdx.y];
}

5.2.3 动态共享内存
核函数不知道需要声明多少大小的SMEM时,可以用动态声明

__global__ void setRowReadColDyn(int *out){//dynamic shared memextern __shared__ int tile[];unsigned int row_idx = blockIdx.y * blockDim.x + threadIdx.x;unsigned int col_idx = blockIdx.x * blockDim.y + threadIdx.y;// smem storetile[row_idx] = row_idx;__syncthreads();// smem loadout[row_idx] = tile[col_idx];
}

在调用核函数的时候需要在<<>>>的第三个参数中传递memory大小

setRowReadColDyn<<<grid,block, BDIMX * BDIMY * sizeof(int)>>>(d_A);

5.2.4 填充静态声明的共享内存
填充数组是避免存储体冲突的一种方法。填充静态声明的共享内存很简单。

#define IPAD 1
__global__ void setRowReadColPad(int *out){__shared__ int tile[BDIMY][BDIMX + IPAD];unsigned int idx = blockIdx.y * blockDim.x + threadIdx.x;// smem storetile[threadIdx.y][threadIdx.x] = idx;__syncthreads();// smem loadout[idx] = tile[threadIdx.x][threadIdx.y];
}

nsys profile --stats=true .\checkSmemSquare.exe

 Time (%)  Total Time (ns)  Instances  Avg (ns)  Med (ns)  Min (ns)  Max (ns)  StdDev (ns)           Name--------  ---------------  ---------  --------  --------  --------  --------  -----------  -----------------------23.4             1728          1    1728.0    1728.0      1728      1728          0.0  setColReadCol(int *)18.6             1376          1    1376.0    1376.0      1376      1376          0.0  setRowReadCol(int *)17.7             1312          1    1312.0    1312.0      1312      1312          0.0  warmup(int *)13.4              992          1     992.0     992.0       992       992          0.0  setRowReadColDyn(int *)13.4              992          1     992.0     992.0       992       992          0.0  setRowReadColPad(int *)13.4              992          1     992.0     992.0       992       992          0.0  setRowReadRow(int *)  
http://www.dtcms.com/wzjs/117371.html

相关文章:

  • 免费推广的预期效果seo兼职平台
  • 网站导航作用seo网站培训
  • 山东网站seo设计整合营销策划方案模板
  • 衡水网站建设衡水竞价推广网络推广运营
  • 免费1级做爰网站安卓aso
  • 建站高端网站太原百度快速优化
  • 网站建设辶首选金手指十五宁波关键词优化时间
  • 旅游网站建设背景长沙网站se0推广优化公司
  • 网站备案 超链接114网址大全
  • 网站备案最快几天如何给公司做网络推广
  • 上海建设工程咨询网站广州线下教学
  • 网站开发联系方式年度关键词
  • 怎么给自己公司做网站网络seo培训
  • 谁做视频网站优化教程
  • 穿着高跟鞋做的网站seo网站优化论文
  • 国家住房和城乡建设网站seo关键词优化经验技巧
  • 做网站手机端如何更新广州公关公司
  • 北京城乡建设网站itmc平台seo优化关键词个数
  • 广州荔湾做网站公司index百度指数
  • 常用的网站类型有哪些类型有哪些类型怎么在百度上发布信息广告
  • 如何更改wordpress登录密码错误seo是什么意思
  • 珠海网站建设 金碟电脑零基础培训班
  • 彩票网站代理app拉新平台
  • 临沂网络网站建设推广软件赚钱违法吗
  • wordpress友情链接设置seo搜索引擎优化薪资水平
  • 常州专业房产网站建设百度电商平台app
  • 怎么制作博客网站刷评论网站推广
  • 网站建设 中企动力南昌正版google下载
  • 免费视频网站制作站长工具备案查询
  • 如何上传ftp网站程序太原百度快照优化排名