我通过PyOpenCL发现了OpenCL,但是我很乐于进行一些底层语言编程(C,Rust)。
在我的内核中,我想将结果与集合(哈希集或树集)中的现有数据进行比较,然后再进一步处理它,而不必浏览整个数组。我想避免在主机代码中这样做,以免主机和设备之间发生过多往返。
我不想更改集合的内容,因此不存在工作项并发访问的风险。
我很难找到用于OpenCL的某种“ STL”库,或者用于Set和Hash数据结构的某种开源实现。
我想念东西吗?我应该自己实现Set数据结构吗?
或者在OpenCL内核中使用Hash或Set数据结构是否表示我在做与OpenCL目标不兼容的事情?
OpenCL内核通常用C而不是C ++编写;确切地说,C ++内核是可选的,我不知道支持它的任何实现。
因此,没有什么可比作C ++模板的通用数据结构了,更不用说像STL实现了。此外,C ++中基于树的数据结构通常不是在连续内存上实现的,而是使用大量小内存分配的,这与OpenCL映射得并不好,后者期望数据位于大的“平坦”缓冲区中。它也不能很好地映射到GPU很好支持的内存访问模式。
就是说,没有什么可以阻止您构建在哈希表中执行查找或在排序数组中实现查找的二进制搜索的OpenCL内核。
这两种情况下的查找操作都非常简单,并且由于C不支持泛型函数,这可能是为什么没有一些大型库的主要原因。
另一个原因是,使其高效将在很大程度上取决于数据的性质和所针对的硬件,因此,几乎可以肯定,您需要做大量的手工操作才能使其变得更快。同样,图书馆可能会带来更多的障碍。