Стоит ли распараллеливать эти вложенные циклы? Cuda C ++ - PullRequest
0 голосов
/ 26 апреля 2020

Я планирую распараллелить следующее l oop в графическом процессоре:

for (i = 1; i <= s; i++) {
    memcpy(&p[5][i][0], &zero[0][0][0], sizeof(int)*15));
    for (j = 1; j < 5; j++) {if (i == V[j]) continue;} 
    for (k = 1; k <= 10; j++) {++p[5][i][k];}       
    }

"s" может принимать значения до 1000, но все это l oop повторяется более миллиона раз в программа (и рекурсивно, поэтому нет возможности распараллелить это, по крайней мере, с моими навыками), следовательно, необходимо ускорить процесс Трехмерный массив «ноль» используется для того, чтобы просто инициализировать значения трехмерного «р» массива равными 0 (это был самый быстрый способ, который я мог придумать). Все переменные являются целыми числами без знака. Из-за того времени, которое требуется для копирования данных в память устройства и обратно, Cuda собирается замедлять работу? Если нет, может кто-нибудь помочь с кодом Cuda необходимо? Должен ли я использовать упорный или низкоуровневый код ядра (ни один из которых я не умею, кстати)?

...