Как использовать CUDA с C для ускорения части кода C? - PullRequest
0 голосов
/ 18 февраля 2019

Это код устройства, который я написал до сих пор.

__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 голосов
/ 18 февраля 2019

Это не Полный и проверяемый пример , который вы должны предоставить здесь в StackOverflow (например - что is d_alpha_to?), Но я все еще могу сделать несколько предложений:

  1. Используйте больше потоков вместо того, чтобы каждый поток выполнялся очень много раз.Параллелизация работы графического процессора приводит к насыщению процессоров потоками, которые готовы выполнять больше вычислений.
  2. Не работайте с (одним и тем же местом) в глобальной памяти несколько раз.Поместите d_s[tid] в локальную переменную (которая будет помещена в регистр), поработайте с ней там, и когда вы закончите, запишите ее обратно.Доступ к глобальной памяти, очевидно, намного медленнее, чем доступ к регистрам.
  3. Украсьте свои указатели с помощью __restrict__ (и сделайте d_cx указателем const).Подробнее о __restrict__ здесь .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...