我对CUDA编程有问题!输入是矩阵A(2 x 2),输出是矩阵A(2 x 2),每个新值都是**旧值的3指数**示例:输入:A:{2,2}输出:A { 8,8} {2,2} {8,8}
我在CudaCode.CU文件中有2个功能:
__global__ void Power_of_02(int &a)
{
a=a*a;
}
//***************
__global__ void Power_of_03(int &a)
{
int tempt = a;
Power_of_02(a); //a=a^2;
a= a*tempt; // a = a^3
}
Run Code Online (Sandbox Code Playgroud)
和内核:
__global__ void CudaProcessingKernel(int *dataA ) //kernel function
{
int bx = blockIdx.x;
int tx = threadIdx.x;
int tid = bx * XTHREADS + tx;
if(tid < 16)
{
Power_of_03(dataA[tid]);
}
__syncthreads();
}
Run Code Online (Sandbox Code Playgroud)
我认为是正确的,但是会出现错误:仅在compute_35或更高版本的体系结构上允许从__global__函数(“ Power_of_03”)调用__global__函数(“ Power_of_02”)
为什么我错了?怎么修呢?
我有一个方阵矩阵,int *M[10];以便M[i]找到i-th矩阵的第一个元素.我想将所有矩阵乘以M[i]另一个矩阵N,以便我接收一个方阵矩阵int *P[10]作为输出.
我看到了不同的可能性:
M[i]不同线程的不同元素; 例如,我有大小的10矩阵,4x4以便涉及的线程数量160; 如何使用CUDA实现这种方法?40x40(即,收集10,4x4大小矩阵在一起)和使用40x40线程; 但这种方法似乎需要更多时间; 我正在尝试使用矩阵数组,但我认为我做错了; 我如何在10矩阵中使用这种方法?如何在内核函数中编写代码?这就是我正在尝试的;
void GPU_Multi(int *M[2], int *N, int *P[2], size_t width)
{
int *devM[2];
int *devN[2];
int *devP[2];
size_t allocasize =sizeof(int) *width*width;
for(int i = 0 ; i < 10 ; i ++ )
{
cudaMalloc((void**)&devM[ i ], allocasize ); …Run Code Online (Sandbox Code Playgroud)