小编coe*_*ion的帖子

在cuda中,加载到共享内存比加载到寄存器要慢

我不是一位经验丰富的CUDA程序员.我遇到了这样的问题.我正在尝试从全局内存中将大矩阵(10K*10K)的磁贴(32x32)加载到共享内存中,并在发生时对其进行计时.我意识到,如果我将它加载到专用内存(寄存器),它加载比共享内存加载快4-5倍.

__global__ void speedtest( float *vel,int nx) {

int globalx = blockDim.x * blockIdx.x + threadIdx.x+pad;
int globalz = blockDim.y * blockIdx.y + threadIdx.y+pad;
int localx=threadIdx.x;
int localz=threadIdx.y;

float ptest;
__shared__ float stest[tile][tile];

//stest[localz][localx]=vel[globalz*nx+globalx]; //load to shared memory
ptest=vel[globalz*nx+globalx];  //load to private memory
__syncthreads();
}
Run Code Online (Sandbox Code Playgroud)

我逐一评论stest和ptest并用cudaeventrecord计算经过的时间.stest耗时3.2毫秒,ptest耗时0.75毫秒.我究竟做错了什么?时间应该非常相似吗?我错过了什么?

配置:Cuda 7.5,gtx 980,只有32位变量和计算,没有特定目的,我只是在玩它.

我正在按要求发布示例代码

#include<stdio.h>
#include <math.h>
#define tile 32
#include <helper_cuda.h>
void makeittwo(float *array,int nz,int nx)
{
//this just assigns a number into the vector
int n2; …
Run Code Online (Sandbox Code Playgroud)

c performance cuda shared-memory

4
推荐指数
1
解决办法
636
查看次数

标签 统计

c ×1

cuda ×1

performance ×1

shared-memory ×1