gpt4 book ai didi

c - 如何在 Opencl 内核中传递本地地址空间中的数组

转载 作者:行者123 更新时间:2023-11-30 14:57:59 27 4
gpt4 key购买 nike

我想将一个数组传递到本地地址空间中的 OpenCL 内核。但我得到CL_invalid_VALUE

int a[]={1,2,3,4,5};

我们不需要创建缓冲区来在本地地址空间中传递数据。所以:

clSetKernelArg(kernel, 21, sizeof(int)*5,a);

在内核

__kernel void abc(__local int *a)
{}

如果我将 __local 更改为 __global,一切正常。请告诉我该怎么做。

最佳答案

您无法将任何内容从主机传递到本地内存。

在内核参数中指定本地指针的目的是指定运行时本地缓冲区的大小。然后在 clSetKernelArg 调用中,第三个参数是大小,第四个参数必须为 NULL。 Documentation

假设您正在使用 GPU,您可以将其传递到常量内存,如果它始终相同,则初始化内核中的本地内存,或者将其传递到全局内存,然后最好使用 async_work_group_copy. 将其加载到内核中的本地内存

关于c - 如何在 Opencl 内核中传递本地地址空间中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43542618/

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