相关疑难解决方法(0)

在CUDA中增加每个线程的工作的示例

简介:首先,作为介绍,我很自豪地在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)

c++ cuda euclidean-distance distance-matrix

10
推荐指数
1
解决办法
1320
查看次数

标签 统计

c++ ×1

cuda ×1

distance-matrix ×1

euclidean-distance ×1