gpt4 book ai didi

CUDA 指针取消引用问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:56 25 4
gpt4 key购买 nike

我正在使用 cuda sdk 和 9600 1 GB NVidia 卡开发程序。在这个程序

0)内核在其输入参数中传递一个大小为 3000x6 的 2D int 数组指针。

1) kenel 必须将其分为 3 个级别(第 1、2 和 3 列)。

2)为此,内核声明了一个大小为 3000 的 int 指针数组。

3) 内核然后用指向输入数组位置的指针按排序顺序填充指针数组。

4) 最后,内核通过取消引用指针数组将输入数组复制到输出数组中。

这最后一步失败并停止了 PC。

Q1)cuda 中指针解除引用以获取内存内容的准则是什么?

,即使是最小的 20x2 阵列也无法正常工作。相同的代码在 cuda 设备内存之外工作(即,在标准 C 程序上)

Q2)它的工作方式是否应该与我们在标准 C 中使用“*”运算符所做的工作相同,或者是否有一些 cudaapi 可用于它?

最佳答案

我刚开始研究 cuda,但实际上我只是从一本书中读到的。听起来它直接适用于您。

“您可以将使用 cudaMalloc() 分配的指针传递给在设备上执行的函数。(内核,对吧?)

您可以使用通过 cudaMalloc() 分配的指针从在设备上执行的代码读取或写入内存。(又是内核)

您可以将使用 cudaMalloc 分配的指针传递给在主机上执行的函数。 (常规 C 代码)

您不能使用通过 cudaMalloc() 分配的指针从在主机上执行的代码中读取或写入内存。”

  • ^^ 来自 Jason Sanders 和 Edward Kandrot 的“Cuda by Example”,由 Addison-Wesley yadda yadda 出版,此处禁止抄袭。

因为你在内核中取消引用,也许与最后一条规则相反也是正确的。也就是说,您不能使用主机分配的指针从设备上执行的代码读取或写入内存。

编辑:我还刚刚注意到一个名为 cudaMemcpy 的函数

看起来您需要在主机代码中两次声明 3000 int 数组。一个通过调用 malloc,另一个通过调用 cudaMalloc。将 cuda one 传递给内核以及要排序的输入数组。然后在调用内核函数之后:

cudaMemcpy(malloced_array, cudaMallocedArray, 3000*sizeof(int), cudaMemcpyDeviceToHost)

我真的只是开始研究这个,就像我说的那样,所以也许有更好的解决方案。

关于CUDA 指针取消引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com