Intro
Я пытаюсь написать программу, которая сравнивает векторы друг с другом.Мне нужно, чтобы он сравнивал каждый вектор с любым другим вектором и возвращал вектор c, где c [i] = a [i] / b [i].Поэтому мне нужен вектор C для каждой пары векторов в наборе.
Код - упрощенный
__global__
void compare_vectors(*a, *b, *c)
{ c[ i ] = a[ i ] / b[ i ] }
main()
for(... all vectors...)
compare_vectors <<< grid, block >>> (n, n+1, result)
Проблема
Моя проблема в том, что делать это медленнее, чемэто на процессоре.Каждый раз, когда я повторяю цикл for, два вектора сравнения копируются в память устройства, а затем вектор результата копируется обратно в память хоста.
Я хочу иметь возможность сравнивать каждый вектор с каждым другим, но делать это эффективно, а затем копировать все результаты сразу.Как я могу структурировать это так, чтобы не было так много вызовов cudaMemcpy?
Информация
Я новичок в CUDA, поэтому, пожалуйста, будьте милостивы, если это супер очевидно.
Я прошел через несколько уроков и искал вокруг.Но все остальные примеры, кажется, сравнивают два очень длинных вектора, а не множество меньших векторов.Я много занимался поиском и исследованием, но не могу найти способ сделать это.
У меня есть около 2000 векторов для сравнения.И каждый вектор сравнивается с любым другим вектором.Итак, ~ 2000 ^ 2 сравнений.Каждый вектор длиной от 100 до 200 поплавков.
Спасибо @MartinBonner и @ platinum95.Рисование на сетке сделало вещи более ясными.