pyC*_*uda 5 parallel-processing matlab cuda gpu linear-algebra
我正在使用[PTX文件与matlab parallel.gpu.CUDAkernel] [2]在GPU上并行工作[此文件] [1].我[kron tensor product] [3]的问题如下.我的代码应该乘以两个向量kron(a,b)乘以第一个向量a=<32x1>的每个元素乘以另一个向量的所有元素,b=<1x32>输出向量大小将是k<32x32>=a.*b.我试着用C++编写它并且它起作用,因为我只关心求和2d数组的所有元素.我认为我可以轻松实现一维数组因为m=sum(sum(kron(a,b)))我正在处理的代码
for(i=0;i<32;i++)
for(j=0;j<32;j++)
k[i*32+j]=a[i]*b[j]
Run Code Online (Sandbox Code Playgroud)
这意味着让第a[i]th个元素乘以eachelement b而且我会使用32块,每个块都有一个32线程,代码应该是
__global__ void myKrom(int* c,int* a, int*b) {
int i=blockDim.x*blockIdx.x+threadIdx.x;
while(i<32) {
c[i]=a[blockIdx.x]+b[blockDim.x*blockIdx.x+threadIdx.x];
}
Run Code Online (Sandbox Code Playgroud)
这应该成为blockIdx.x外部循环的技巧,但事实并非如此.任何身体可以告诉我在哪里,我可以要求平行的方式来做平行和.
你的意思实际上可能是这样的:
__global__ void myKrom(int* c,int* a, int*b)
{
int i=blockDim.x*blockIdx.x+threadIdx.x;
if(i<32*32){
c[i]=a[blockIdx.x]+b[threadIdx.x];
}
}
Run Code Online (Sandbox Code Playgroud)
当你通过调用内核时myKrom<<<32, 32>>> (c, a, b);
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |