Не работает cudaSetDevice, массив выдаёт не инициализированные значения
недавно начал изучать cuda c, узнал про функцию cudaSetDevice и решил протестировать её
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
#include <stdio.h>
const int choses = 1;
__global__ void func(int* a,const int choses = 0)
{
a[blockIdx.x + choses] = 1;
}
int main()
{
int* a;
int* a_cpu = new int[2];
cudaMalloc((void**)&a, 2 * sizeof(int));
while (true)
{
cudaSetDevice(0);
func <<<1, 1 >>> (a);
cudaSetDevice(1);
func <<<1, 1 >>> (a, choses);
cudaMemcpy(a_cpu, a, 2 * sizeof(int), cudaMemcpyDeviceToHost);
std::cout << a_cpu[0] << " ";
std::cout << a_cpu[1] << "\n";
}
}
Программа берет массив из 2 чисел и вечно суммирует, причём каждый элемент суммирует своя видеокарта после копирует данные в переменную CPU, но программа почему то выдаёт что элементы массива не инициализрованы
P.S без cudaSetDevice() всё работает как надо.
Источник: Stack Overflow на русском