最近开始学习 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 变量中,但由于某种原因,程序报告数组元素未初始化
PS 没有 cudaSetDevice() 一切正常。