CUDA:将结构指针传递给设备函数可以吗?

发布于 2024-12-06 03:25:15 字数 55 浏览 0 评论 0原文

在内核内部,可以将内核内部声明的结构体地址传递给设备函数吗?设备函数的参数是一个指向结构的指针。

Inside of a kernel, is it OK to pass the address of a struct, which is declared inside the kernel, to a device function? The device function's argument is a pointer to a struct.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

赏烟花じ飞满天 2024-12-13 03:25:15

是的,如下程序所示:

#include <stdio.h>

struct my_struct
{
  int x;
};

// foo receives its argument by pointer
__device__ void foo(my_struct *a)
{
  a->x = 13;
}

__global__ void kernel()
{
  my_struct a;
  a.x = 7;

  // expect 7 in the printed output
  printf("a.x before foo: %d\n", a.x);

  foo(&a);

  // expect 13 in the printed output
  printf("a.x after foo: %d\n", a.x);
}

int main()
{
  kernel<<<1,1>>>();
  cudaThreadSynchronize();
  return 0;
}

结果:

$ nvcc -arch=sm_20 test.cu -run
a.x before foo: 7
a.x after foo: 13

Yes, as the following program demonstrates:

#include <stdio.h>

struct my_struct
{
  int x;
};

// foo receives its argument by pointer
__device__ void foo(my_struct *a)
{
  a->x = 13;
}

__global__ void kernel()
{
  my_struct a;
  a.x = 7;

  // expect 7 in the printed output
  printf("a.x before foo: %d\n", a.x);

  foo(&a);

  // expect 13 in the printed output
  printf("a.x after foo: %d\n", a.x);
}

int main()
{
  kernel<<<1,1>>>();
  cudaThreadSynchronize();
  return 0;
}

The result:

$ nvcc -arch=sm_20 test.cu -run
a.x before foo: 7
a.x after foo: 13
定格我的天空 2024-12-13 03:25:15

如果您在设备上分配了内存并且仅在设备内使用它,那么您可以将其传递给您想要的任何设备功能。

唯一需要担心类似问题的情况是当您想要在设备上使用来自主机的地址或来自主机上的设备的地址时。在这些情况下,您必须首先使用适当的内存副本并获取新的设备或主机特定地址。

If you have allocated memory on the device and use it only within the device, then yes you can pass it to whatever device function you want.

The only time you need to worry about anything like that is when you want to use an address from the host on the device or an address from the device on the host. In those cases, you must first use the appropriate memcopy and get a new device or host specific address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文