CUDA 内核函数中 计算矩阵的n次方

ada5400 2012-06-05 08:52:50
麻烦帮忙看一下下面这个内核函数,是用来计算矩阵的n次方。
循环计算的次数是power-1次;
每次计算把计算出来的结果赋值给temp, 逻辑就是
for(p=1; p<power; p++){
{
prod = temp * b;
temp = prod;
}
但是问题是,在内核函数中,把pointer prod 的地址赋给temp以后, temp就会在计算过程当中受到prod值变化的影响。
请教有没有办法能实现我上面的逻辑呢?
感谢万分!~

#define BLOCK_SIZE 16

__global__ void
power_kernel_func(const float * a, const float * b, float * prod, unsigned int n, unsigned int power) {

unsigned int i, t, p;
__shared__ float matrix_a[BLOCK_SIZE][BLOCK_SIZE];
__shared__ float matrix_b[BLOCK_SIZE][BLOCK_SIZE];

const unsigned int row = blockIdx.y*blockDim.y + threadIdx.y;
const unsigned int col = blockIdx.x*blockDim.x + threadIdx.x;

float* temp=a;
float result;
for(p=1; p<power; p++){
result = 0;
for(t=0; t<n/BLOCK_SIZE; t++){
matrix_a[threadIdx.y][threadIdx.x]=temp[row*n+(t*BLOCK_SIZE+threadIdx.x)];
matrix_b[threadIdx.y][threadIdx.x]=b[(t*BLOCK_SIZE +threadIdx.y)*n+col];
__syncthreads();

for(i=0; i!=BLOCK_SIZE; i++){
result+=matrix_a[threadIdx.y][i] * matrix_b[i][threadIdx.x];
}
__syncthreads();
}
prod[row*n+col]=result;
temp=prod;
}
}
...全文
255 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ada5400 2012-06-05
  • 打赏
  • 举报
回复
麻烦帮忙看下最后一行代码 temp=prod; 应该怎么改呢?

580

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧