用户
 找回密码
 立即注册
wyckk1987101 该用户已被删除
发表于 2013-12-4 12:16:51
82801
版主:您好!
    我自己编写了一个核函数,设置了相应的执行参数,目的是实现两个矩阵之间行与行的相乘,矩阵大小都是32*new_size;程序无法正确的显示结果,请教版主,我这个核函数编写的错误与否?具体代码如下:
  1. dim3 dimBlock(256,1);
  2.         dim3 dimGrid((new_size+dimBlock.x-1)/dimBlock.x,(channel_num14+dimBlock.y-1)/dimBlock.y);
  3.         ComplexPointwiseMulAndScale<<<dimGrid,dimBlock>>>(d_signal,d_filter,new_size,1.0f/new_size);
复制代码
以上代码设置参数及其调用核函数,核函数如下:
  1. //频域相乘的内核函数
  2.         static __global__ void ComplexPointwiseMulAndScale(Complex* a,Complex* b, int size, float scale)
  3.         {
  4.                 const int bid = blockIdx.y ;
  5.                             const int tid = blockIdx.x * blockDim.x + threadIdx.x;
  6.                             const int numThreads=blockDim.x*gridDim.x;

  7.                
  8.                
  9.                 for (int i=;bid;i<32;i+=gridDim.y)
  10.                 {
  11.          for (int j = tid; j < size; j +=numThreads)  
  12.                {
  13.                       a[i*size+j] = ComplexScale(ComplexMul(a[i*size+j], b[i*size+j]), scale);
  14.                }
  15.         }
复制代码
在此谢谢版主!

使用道具 举报 回复
发表于 2013-12-4 13:50:18
LZ您好:

您的程序问题较多,以及您也没有给出全部的信息,下面说几个明显的问题:

1:您第2段第10行代码书写错误,混入了全角的分号,并且这个全角的分号是多余的。

2:你没有给出ComplexScale()和ComplexMul()的实现,如果是他们出现的问题,请您检查一下。

3:您在发布kernel时,grid参数使用了快速向上取整,但是您并没有判断线程号,这可能导致访存越界,从而挂掉kernel。

4:请您自行保证您代码其他参数使用的合理性。

大致如此,供您参考。

祝您好运~
使用道具 举报 回复 支持 1 反对 0
发新帖
您需要登录后才可以回帖 登录 | 立即注册