简介:首先,作为介绍,我很自豪地在StackOverflow上提出我的第一个问题.我希望我能帮助别人,就像他们帮助我一样.
算法:
我正在用CUDA编写一个程序,问题如下:
两个矩阵A(n*128)和B(m*128)
我取A的第一行,然后逐个计算该向量与B的所有行之间的距离.
我在矩阵C的一行上写出每个距离的结果,因此C的元素C(i,j)包含A的行i和B的行j之间的距离.
然后我继续下一行A.
我用这种方式实现了它:我有一个由(n*m)个块组成的网格,每个块有128个线程.(1*128).
问题:程序成功运行并带有预期结果,但执行时间仅比单线程CPU版本快5到10倍.所以我想知道如何在减少之前增加每个线程的工作量以提高性能.
内核代码(原始:未优化)
__global__ void EuclideanDistances( float *A, float *B , float *C , int n , int m)
{
// SIZE is equal to 128
__shared__ float accumResult[SIZE];
float sA;
float sB;
// MAPPING
int bx = blockIdx.x; // n
int by = blockIdx.y; // m
int ty = threadIdx.y; // 128
int tx = threadIdx.x; // 1
sA = A [bx * SIZE + ty];
sB …Run Code Online (Sandbox Code Playgroud)