【问题标题】:cudaMalloc first argument casting, why? [duplicate]cudaMalloc 第一个参数强制转换,为什么? [复制]
【发布时间】:2015-01-28 08:53:26
【问题描述】:

改版后: 我想知道为什么cudaMalloc 的第一个参数应该转换为void** ,例如(void**)&d_A 其中d_A 是一个指针。我不明白语法,但对它的使用特别满意 cudaError_t cudaMalloc ( void ** devPtr, size_t 尺寸
)

干杯

【问题讨论】:

  • 你的意思是cudaMalloc吗? (正如在一个答案中指出的那样:对于cudaMemcpy,这个问题没有意义......)
  • 你是对的,对不起......我的问题是关于 cudaMalloc
  • 这是直接复制的:stackoverflow.com/q/12936986/681865
  • 您的问题仍不清楚。您是在问为什么需要强制转换它,还是在特别问为什么它需要成为双指针 (**) 参数?如果是第一个,则不需要在当前版本的 CUDA 中强制转换(尝试一下。)如果是第二个,则正如 @talonmies 所述,它是重复的。

标签: cuda gpgpu


【解决方案1】:

从来不需要为cudaMemcpy 转换为void**,因为它需要void*。您可能对cudaMalloc 感到困惑,确实采用了void**

从任何指针类型到 void* 的转换在 C 中是隐式的,但在需要强制转换的 C++ 中却没有。

【讨论】:

    【解决方案2】:

    来自 NVidia 教程:

    int main()
    {
        int a[N], b[N], c[N];
        int *dev_a, *dev_b, *dev_c;
        // I deleted the code here, we don't need it
        cudaMemcpy(dev_a, a, N * sizeof(int), cudaMemcpyHostToDevice);
    }
    

    似乎没有必要将 cudaMemcpy 的第一个参数强制转换为 void**。但是,您可能必须将其强制转换为 void*。

    【讨论】:

    • 对不起,我的意思是cudsMalloc
    猜你喜欢
    • 2016-10-10
    • 2013-06-03
    • 2014-05-11
    • 1970-01-01
    • 2013-10-21
    • 2021-05-28
    • 2012-02-10
    • 2019-03-12
    • 2011-05-09
    相关资源
    最近更新 更多