gpt4 book ai didi

cuda - 推力::device_ptr 没有成员 'begin'

转载 作者:行者123 更新时间:2023-12-04 05:29:21 27 4
gpt4 key购买 nike

我试图找到数组中的最小元素:

 thrust::device_ptr<float> devPtr(d_ary);
int minPos = thrust::min_element(devPtr.begin(), devPtr.end()) - devPtr.begin();

我在编译时遇到了上述错误。

我应该如何解决这个问题?谢谢

最佳答案

您确定的具体错误是因为设备指针不是容器,因此没有 .begin().end()成员。
您的 devPtr不是容器,它是 Thrust 可用的设备指针。
您包装了一个原始指针来创建 devPtr,而原始指针并不知道它所指向的数据区域的大小。

指针没有像开始和结束这样的成员。

您可以通过以下方式解决问题:

  • 切换到使用推力矢量容器,这些容器将为您定义 .begin 和 .end 迭代器
  • 为您正在访问的数据区域 (d_ary) 手动创建开始和结束指针

  • 以下是与上述后一种想法一致的一些示例代码:
    #include <thrust/device_ptr.h>
    #include <thrust/extrema.h>

    #define N 256
    int main()
    {

    float *d_a;

    cudaMalloc((void **) &d_a, N*sizeof(float));

    thrust::device_ptr<float> dPbeg(d_a);
    thrust::device_ptr<float> dPend = dPbeg + N;
    thrust::device_ptr<float> result = thrust::min_element(dPbeg, dPend);
    }

    有一个 thrust quickstart guide这可能是有趣的。 (为了清楚起见,我没有用任何错误检查来包装 cudaMalloc 调用。用错误检查来包装 cuda 调用是一种很好的做法。)

    关于cuda - 推力::device_ptr<float> 没有成员 'begin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12820951/

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