如何在C语言中使用CUDA来加速一段C代码?

时间:2019-02-18 13:06:01

标签: performance optimization cuda

这是我到目前为止编写的设备代码。

__global__ void syndrom(int *d_s, int *d_cx) {
int tid = threadIdx.x + blockDim.x * blockIdx.x + 1;
int t2 = 5460;
int N_BCH = 16383;
if (tid <= t2) {
    d_s[Usetid] = 0;
    for (int j = 0; j < N_BCH; j ++) {
        if (d_cx[j] != 0) {
            d_s[tid] ^= d_alpha_to[(tid * j) % N_BCH];
        }
    }
    d_s[tid] = d_index_of[d_s[tid]];
}

}

我在主持人里叫它

dim3 grid(96);
dim3 block(256);

但是速度不是很好,我想寻求帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

这不是Complete and Verifiable Example,您应该在StackOverflow上提供它(例如-is d_alpha_to?),但是我仍然可以提出一些建议:

  1. 使用更多线程,而不是让每个线程都进行大量迭代。 GPU并行工作的方式使处理器充满了可以执行更多计算的线程。
  2. 请勿重复在全局内存中(相同位置)进行操作。将d_s[tid]放入局部变量(将放置在寄存器中),在该变量上进行处理,完成后,将其写回。访问全局内存显然比访问寄存器要慢得多。
  3. __restrict__装饰指针(并使d_cx成为const指针)。了解有关__restrict__ here的更多信息。