Мне нужно сделать одну часть вычислений параллельной.Это вычисления по вектору, и иногда мне нужно делать одну операцию для каждого значения.Поэтому я хочу, чтобы это было параллельно.
Я не могу объяснить свои расчеты на примере (это единственный простой пример, а не мой алгоритм): я перемещаю указатель вперед, и когда я нашел число 5, то я добавляю 5к каждому числу в векторе.
Поэтому я хочу не делать этого на хосте и копировать весь большой вектор на хост <=> устройства (повторяемый) после каждого перемещения указателя.Я полагаю, что это может быть менее эффективно, чем делать все на хосте.
Так что у меня появилась идея, что я скопирую весь вектор на устройство один раз, а затем запусту алгоритм.
Вотпросто справиться, представив мою проблему:
__device__ void devFunction(long long unsigned int *arr, long long unsigned int param, long long unsigned int N) {
long long unsigned int i = blockIdx.x* blockDim.x+ threadIdx.x;
// do something ...
}
__global__ void globFunction(long long unsigned int *arr, long long unsigned int N) {
do {
devFunction(arr, param, N); // I want to run many threads here like <<<...>>>
// do something ...
} while(/* ... */);
}
int main() {
// declare array, alloc memory, copy memory, etc.
globFunction<<< 400000, 256>>>(arr, N); // I think here should be <<<1,1>>>
// do something ...
return 0;
}
Так можно это сделать?Запускать несколько функций параллельно из ядра?Любые другие решения?