clCreateBuffe很耗时吗

  • 3 replies
  • 797 views
clCreateBuffe很耗时吗
« 于: 九月 18, 2021, 10:36:33 am »
有没有必要建立一个内存池类的东西 对clCreateBuffer和clReleaseMemObject 进行管理,有现成的模块吗,大家一般怎么处理?  多多指教 谢谢!

Re: clCreateBuffe很耗时吗
« 回复 #1 于: 九月 22, 2021, 01:47:36 pm »
有没有必要建立一个内存池类的东西 对clCreateBuffer和clReleaseMemObject 进行管理,有现成的模块吗,大家一般怎么处理?  多多指教 谢谢!

你好,作为规范的OpenCL并没有讨论clCreateBuffer是否耗时,这个得看具体实现。

例如某些AMD的实现可能在create的时候很快,但是在第一次访问或者Enqueue了Map/Read/Write之类的时候,在此时却比较慢(首次touch)。这个得看具体实现的。

此外,不建议频繁CreateBuffer和ReleaseMemObject的,如果真的需要这样做,我建议自行实现一个pool/heap(如果你感觉的那样)。

关于你的第三个问题,是否有现成的代码/库可以完成该设想,这个暂时不清楚。
« 最后编辑时间: 九月 22, 2021, 01:50:40 pm 作者 屠戮人神 »

Re: clCreateBuffe很耗时吗
« 回复 #2 于: 九月 28, 2021, 10:08:50 am »
我在移动端Adreno和mali gpu上都测试过,答案是耗时的,比cpu malloc慢不少,所以之前在做项目的时候通常都会在opencl初始化的时候一并申请好一些比较大的Buffer。 另外我记得好像是adreno create快release慢,mali create慢release快。所以总的来说create+release的时间大致是差不多的,并且buffer越大,耗时越多。

Re: clCreateBuffe很耗时吗
« 回复 #3 于: 九月 28, 2021, 12:23:35 pm »
我在移动端Adreno和mali gpu上都测试过,答案是耗时的,比cpu malloc慢不少,所以之前在做项目的时候通常都会在opencl初始化的时候一并申请好一些比较大的Buffer。 另外我记得好像是adreno create快release慢,mali create慢release快。所以总的来说create+release的时间大致是差不多的,并且buffer越大,耗时越多。

感谢FDY提供adreno和玛丽上的测试信息,你的贡献使得世界变得更美好。