我正在优化cuda程序。因此,我首先从矩阵乘法程序的优化开始。我用于并行化的线程方案是Blocksize(1,1),Gridsize(N,N)。我将表面内存用于内存优化目的(因为此线程方案无法使用共享内存)。当我比较优化前后的时间时,我发现执行使用表面内存后需要花费两倍的时间(我尝试使用不同的线程方案,但问题仍然存在)。从我到目前为止所读的内容来看,全局内存比表面内存要慢。因此使用表面存储器应该花费更少的时间。下面我给出使用表面存储器的矩阵乘法程序。有人可以告诉我这是什么问题吗?
#include < stdio.h >
#include < cuda.h >
//#define N 3
surface < void, 2 > a_surf;
surface < void, 2 > b_surf;
surface < void, 2 > c_surf;
void CUDA_SAFE_CALL(cudaError_t call, int line) {
switch (call) {
case cudaSuccess:
break;
default:
printf("ERROR at line :%i.%d' ' %s\n",
line, call, cudaGetErrorString(call));
exit(-1);
break;
}
}
__global__ void mul(int N) {
int a, b, c, temp;
int i;
unsigned int x = blockIdx.x * blockDim.x + (threadIdx.x);
unsigned int y …Run Code Online (Sandbox Code Playgroud) cuda ×1