我是 Thrust 的新手。我看到所有 Thrust 演示文稿和示例仅显示主机代码。
我想知道是否可以将 device_vector 传递给我自己的内核?如何?
如果是,那么内核/设备代码中允许对其进行哪些操作?
正如最初编写的那样,Thrust 纯粹是主机端抽象。它不能在内核内部使用。您可以将封装在设备内存中的thrust::device_vector
像这样到你自己的内核:
thrust::device_vector< Foo > fooVector;
// Do something thrust-y with fooVector
Foo* fooArray = thrust::raw_pointer_cast( fooVector.data() );
// Pass raw array and its size to kernel
someKernelCall<<< x, y >>>( fooArray, fooVector.size() );
您还可以通过使用裸cuda设备内存指针实例化thrust::device_ptr,在推力算法中使用未由推力分配的设备内存。
四年半后编辑补充一点,根据 @JackOLantern 的回答,thrust 1.8 添加了顺序执行策略,这意味着您可以在设备上运行推力算法的单线程版本。请注意,仍然无法将推力设备向量直接传递到内核,并且设备向量不能直接在设备代码中使用。
请注意,也可以使用thrust::device
在某些情况下,执行策略是由内核作为子网格启动并行推力执行。这需要单独的编译/设备链接和支持动态并行性的硬件。我不确定所有推力算法是否实际上都支持这一点,但肯定适用于某些算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)