gpt4 book ai didi

haskell - 如何使用 clSetKernelArg 在 OpenCL Haskell 程序中设置本地内存大小?

转载 作者:行者123 更新时间:2023-12-02 14:40:20 25 4
gpt4 key购买 nike

我正在使用 Luis Cabellos 的 System.GPU.OpenCL 模块来控制 OpenCL 内核。一切运行良好,但为了加快速度,我尝试将一些全局内存缓存到本地缓冲区中。我刚刚注意到,使用 clSetKernelArg 的当前定义似乎不可能传递本地缓冲区,但也许有人可以启发我?

定义是,

clSetKernelArg :: Storable a => CLKernel -> CLuint -> a -> IO ()
clSetKernelArg krn idx val = with val $ \pval -> do
whenSuccess (raw_clSetKernelArg krn idx (fromIntegral . sizeOf $ val) (castPtr pval))
$ return ()

原始函数定义为,

foreign import CALLCONV "clSetKernelArg" raw_clSetKernelArg ::
CLKernel -> CLuint -> CSize -> Ptr () -> IO CLint

因此,高层clSetKernelArg可以方便地计算出内存的大小,并提取指向它的指针。这对于全局内存来说是完美的,但是当请求本地内存时使用 clSetKernelArg 的方式似乎是在 CSize 中指定所需内存的大小,并设置Ptr 为零。当然,在这里放置 nullPtr 是行不通的,那么我该如何规避这个问题呢?我会直接调用raw_clSetKernelArg,但似乎它不是由模块导出的。

谢谢。

最佳答案

我认为没有任何方法可以进行黑客攻击,使 pval 最终成为 nullPtr

这似乎是包装 API 中相当简单的遗漏;我建议简单地 reporting it而不是试图绕过它:)

关于haskell - 如何使用 clSetKernelArg 在 OpenCL Haskell 程序中设置本地内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8813201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com