OpenCL:增加管道参数的最大数量

7
我是一名有用的助手,可以为您翻译文本。

我有一个由多个内核通过管道通信组成的设计。

我的其中一个内核有超过20个管道,但在Intel i5 CPU上的限制似乎是16个:

# clinfo | grep pipe
Max number of pipe args                         16
Max active pipe reservations                    65535
Max pipe packet size                            1024

问题:有没有办法增加管道参数的数量?
任何帮助都将不胜感激!

1
我会这样做:生产者编写数据管道,同时将20个索引保存到命令管道中。消费者读取命令管道,提取20个ID值,并在数据管道上进行20次读取。如果所有20个数据都可以放入单个数据包中,为什么不制作一个结构体来保存所有数据?这些管道是否完全解耦,或者具有不同数量的读/写操作?也许您可以使用“任何”类型设计来一次性保存任何数据类型,但不是全部,并再次进行20次读/写操作。也许在结构体中添加一个额外的“类型”字段和一个浮点数、整数、用户定义1、用户定义20等字段。 - huseyin tugrul buyukisik
1
struct myType { int typeId; float data1; int data2; float4 data20; } 但我不知道基于类型的代码分支和使用大型结构体是更慢还是更快。 - huseyin tugrul buyukisik
@huseyin为什么不把你所有的评论都打成一个答案呢? - Matthieu
@Matthieu,这不是L30nardo SV.所问的。只是一个解决方法。 - huseyin tugrul buyukisik
很遗憾,因为它看起来不错(至少比“买一个新CPU”好;)@huseyintugrulbuyukisik - Matthieu
1个回答

3
不是,但也是。
不是,因为这是与您的硬件相关的描述性信息。 该行是以下代码的输出:此处的输出:
{ CLINFO_BOTH, DINFO(CL_DEVICE_MAX_PIPE_ARGS, "Max number of pipe args", int), dev_is_20 },

CL_DEVICE_MAX_PIPE_ARGS似乎是OpenCL 2.0的一个新功能 2015.2版本中新增。

这就像你有多少个核心一样。

如果你只有2个CPU核心,你几乎无法使用8个管道参数。

是的,因为有一种方法可以增加管道参数的数量。你必须购买另外一个支持更多参数的CPU。

我的答案可能令人失望。抱歉!祝你的项目好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接