【发布时间】:2012-05-12 19:58:05
【问题描述】:
我在一个数组中有 1000 个浮点数据。我想分成不同的班级,比如说4个班级。它们的大小是不可预测的。我可以很容易地将它们保存在 CPU 实现中的链表中,但是在 OpenCL 内核中,有这样的机会吗?在我看来,这个问题有 3 个解决方案。 首先,在类数中构造长度为 1000 的数组,这很耗费内存。 其次,我分配一个长度为 1000 的数组并将它们分成几部分。但是,我可能会将值从不同的索引传输并索引到不同的索引中,因为我不知道每个类的大小,它们可能会超过我为每个类提供的大小。
第三,我认为更好的是,我得到了两个长度相同的不同数组。其中一个存储数据,另一个存储指针。例如,在数据数组的第 i 个索引中,存储属于第 2 类的值。此外,在指向属于第二类的下一个数据的指针的第 i 个索引中。但这仅适用于原子类型(如 int、float、char 等)链表。
我是 OpenCL 的新手。我还不知道它的很多功能。如果有更好的方法,请不要与我和其他人分享。
【问题讨论】:
-
我知道现在回答这个问题可能为时已晚,但在 OpenCL 中使用链表似乎仍然很有趣,所以我在这里放了一个关于它的网站的链接。 streamcomputing.eu/blog/2015-02-10/… 和我引用“共享虚拟内存:主机和设备内核可以直接共享复杂的、包含指针的数据结构,例如树和链表,提供显着的编程灵活性并消除主机和设备之间昂贵的数据传输。”
标签: linked-list opencl