Процедура описывается следующим образом:
#include <cuda.h>
#include <cutil_math>
#include <cuda_runtime.h>
#include <iostream>
struct testtype
{
float x;
int y;
char z;
};
__device__ testtype* gpu_config;
__global__
void test()
{
gpu_config->y = 3.0;
};
int main(void)
{
testtype cpu_config;
cpu_config.x = 1;
cpu_config.y = 2.0f;
cpu_config.z = 'A';
testtype val ;
if (cudaMalloc((void**) &gpu_config, sizeof(testtype)) != cudaSuccess)
{
return -1;
}
cudaMemcpy(gpu_config, &cpu_config, sizeof(testtype), cudaMemcpyHostToDevice);
test<<<1,1,0>>>();
cudaMemcpy(&val, gpu_config, sizeof(testtype), cudaMemcpyDeviceToHost);
std::cout << val.y << std::endl;
}
при удалении теста <<< 1,1,0 >>> ();val изменяется так же, как gpu_config.но когда есть тест <<< 1,1,0 >>> ();, val.y не равен 3.0.это означает, что глобальная функция test не меняет значение val.Я хочу знать, как изменить значение _ устройства _ через глобальные функции.