关于核函数编写及其运行

版主:您好!
我自己编写了一个核函数,设置了相应的执行参数,目的是实现两个矩阵之间行与行的相乘,矩阵大小都是32*new_size;程序无法正确的显示结果,请教版主,我这个核函数编写的错误与否?具体代码如下:

dim3 dimBlock(256,1);
	dim3 dimGrid((new_size+dimBlock.x-1)/dimBlock.x,(channel_num14+dimBlock.y-1)/dimBlock.y);
	ComplexPointwiseMulAndScale<<<dimGrid,dimBlock>>>(d_signal,d_filter,new_size,1.0f/new_size);

以上代码设置参数及其调用核函数,核函数如下:

//频域相乘的内核函数
	static __global__ void ComplexPointwiseMulAndScale(Complex* a,Complex* b, int size, float scale)
	{
		const int bid = blockIdx.y ;
   const int tid = blockIdx.x * blockDim.x + threadIdx.x;
   const int numThreads=blockDim.x*gridDim.x;

		
		
		for (int i=;bid;i<32;i+=gridDim.y)
		{
   for (int j = tid; j < size; j +=numThreads)  
   {
   a[i*size+j] = ComplexScale(ComplexMul(a[i*size+j], b[i*size+j]), scale);
   }
	}

在此谢谢版主!

LZ您好:

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

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

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

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

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

大致如此,供您参考。

祝您好运~