如何在 C 中将向量参数传递给 OpenCL 内核?

2024-04-30

我在将向量类型 (uint8) 参数从 C 中的主机代码传递到 OpenCL 内核函数时遇到问题。

在主机中,我将数据存储在数组中:

cl_uint dataArr[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };

(我的真实数据不仅仅是 [1, 8];这只是为了便于解释。)

然后,我将数据传输到缓冲区以传递给内核:

cl_mem kernelInputData = clCreateBuffer(context,
    CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(cl_uint)*8, dataArr, NULL);

接下来,我将此缓冲区传递到内核中:

clSetKernelArg(kernel, 0, sizeof(cl_mem), &kernelInputData);

内核函数的签名看起来像这样:

kernel void kernelFunction(constant uint8 *vectorPtr)

但是,内核似乎没有从指向的指针获取正确的输入数据kernelInputData。当我从内核内部传回值时,我看到vectorPtr指向具有这种结构的东西:( 1, 2, 3, 4, 5, ?, ?, ? )问号在哪里usually 4293848814但是有时0。不管怎样,都不是他们应该的样子。

我究竟做错了什么?


EDIT:

我已在主机端从使用数组切换为 cl_uint8。我现在有:

cl_uint8 dataVector = { 1, 2, 3, 4, 5, 6, 7, 8 };

我将这个向量传递给内核,如下所示:

clSetKernelArg(kernel, 0, sizeof(cl_uint8), &dataVector);

内核函数的签名看起来像这样:

kernel void kernelFunction(constant uint8 *vectorPtr)

但是,运行这段代码给了我一个CL_INVALID_ARG_SIZE错误clSetKernelArg()。如果我切换此错误就会消失ARG_SIZE参数为sizeof(cl_uint8 *)但后来我得到了EXC_BAD_ACCESS错误于__dynamic_cast within clSetKernelArg().

我的设备是:

Apple Macbook Pro(2009 年中)
OSX 10.8 山狮
NVIDIA GeForce 9400M
OpenCL 1.0
CLH 1.0


您正在定义一个大小为 8 的 cl_uint 数组。 cl_mem 的创建和内核参数的设置是正确的。 但是您的内核参数不正确:您尝试读取 cl_uint8 而不是 cl_uint 的数组。

如果要使用向量数据类型,则必须声明:大小为 1 的 cl_uint8 dataArr。 或者如果你想使用大小为 8 的数组:kernel void kernelFunction(constant uint *vectorPtr, uint size):

Edit:

内核参数为cl_uint8 dataVector不是指针。 所以,正确的代码是:

cl_uint8 dataVector = { 1, 2, 3, 4, 5, 6, 7, 8 };
clSetKernelArg(kernel, 0, sizeof(cl_uint8), &dataVector);

and

kernel void kernelFunction(constant uint8 vectorPtr)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C 中将向量参数传递给 OpenCL 内核? 的相关文章

随机推荐

  • 修改 SIR 模型以包含随机性

    我正在尝试通过将真实流行曲线与随机 SIR 模型的模拟进行比较来建立一种估计传染病参数的方法 为了构建随机 SIR 模型 我使用 deSolve 包 而不是使用固定参数值 我想从以原始参数值为中心的泊松分布中绘制每个时间点方程中使用的参数值
  • If 语句不遵循其条件

    在我的滚动代码中 您只需编写 r 然后按 Enter 键 但似乎不会读取该内容并转到重新启动 while 循环的 else 让它滚动的唯一方法是输入除 r 之外的其他内容 而不是 standard in 1 解析错误 bin bash th
  • 模板编译错误 - 没有匹配的调用函数

    我正在尝试将字符串转换为数字 为此 我找到了以下方法 include
  • 是否可以从C语言函数写入word文件?

    我有一个用 C 语言编写的图书馆管理系统 其中有 I O 文件 dat 如何从该函数中获取word文件的输出 void viewbooks void show the list of book persists in library int
  • 为什么如果条件无法比较负整数和正整数[重复]

    这个问题在这里已经有答案了 include
  • gsub的时间复杂度

    一根长绳子s仅包含0 and 1 这段 Ruby 代码计算了有多少个1有 s gsub 1 count Big O 表示法的时间复杂度是多少 有没有一个工具可以进行计算 据我所知 没有一个通用工具可以计算任意代码的 Big O 表示法 这将
  • 错误:数组不得包含空值 PostgreSQL

    我的查询是 SELECT id ARRAY AGG session os integer FROM t GROUP BY id HAVING ARRAY AGG session os integer ARRAY 1 NULL 它正在给予ER
  • 将基类添加到现有原型链中,以便instanceof工作

    我有一个现有的原型层次结构 我想对其进行修改 以便保持层次结构完整 但在其末尾添加了一个额外的原型 instanceof应该对所有原型返回 true 即 假设我有 B gt A 我想将其设为 B gt A gt Base 现在instanc
  • 用几个 1 位 ALU 制作一个 4 位 ALU

    我正在尝试将几个 1 位 ALU 组合成一个 4 位 ALU 我对如何在 VHDL 中实际执行此操作感到困惑 这是我正在使用的 1 位 ALU 的代码 component alu1 define the 1 bit alu componen
  • 如何创建 TimescaleDB Hypertable,并在非唯一时间戳上进行时间分区?

    我刚刚开始使用 TimescaleDB 想要在包含事件的表上创建一个超表 最初我想到遵循以下常规模式 CREATE TABLE event id serial PRIMARY KEY ts timestamp with time zone
  • CSS 叠加在图像背景上

    我想在图像背景上叠加 以便更清楚地看到图像上方的白色文本 为什么不会这个解决方案 http codepen io anon pen aBJErm work HTML div class bg1 image cover p H p div C
  • Django Admin 中的自定义操作

    在我的 Django 应用程序中 我有一个新闻通讯模型 现在我希望能够send时事通讯 甚至resend它 来自 Django Admin 我可以用钩子来做到这一点Model save 方法 但还有另一种与模型无关的方法吗 Thanks 管
  • 使用 HttpClient 的 HTTP 请求太慢?

    我正在尝试编写一个 Android 应用程序 将一些发布值发送到托管在专用服务器上的 php 文件并存储数组结果 代码是这样的 HttpPost httppost DefaultHttpClient httpclient httppost
  • 如何使用 webpack 从 node_modules 加载静态 CSS 文件的示例?

    我不知道如何使用 webpack 从 node modules 库加载任何 CSS 例如我已经安装了 leaflet 以及每次尝试加载leaflet dist leaflet css fails 您能提供如何从node modules加载静
  • 在Java中将资源文本文件读取到字符串[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有办法将资源中的文本文件读入字符串 我想这是一个流行的要求 但在谷歌搜索后我找不到任何实用工具 Y
  • 在哪里放置 Access vba 代码以仅在物理打印时触发?

    我有一些代码想要在用户实际打印报告时触发 不是在打印预览等时 而是仅在发送到打印机时 用户需要能够提取报告并查看它 然后如果他们决定打印 VBA 代码将接管并将一些信息写入与用于生成报告的表不同的表中 我希望不必在实际报告上放置 打印 按钮
  • 如何链接 SSL 证书

    有没有什么方法可以将我们自己生成的密钥对与已链接到根 CA 例如 verisign 的现有证书链接起来 基本上我的问题如下图所示 Verisign Root CA gt Company XYZ certificate gt Server f
  • mysql 日期与 date_format 的比较

    我用谷歌搜索并尝试了几种方法来比较日期 但不幸的是没有得到预期的结果 我的当前记录状态如下 mysql gt select date format date starttime d m Y from data date format dat
  • 如何将wordpress从mamp推送到hostgator

    我在 mamp 中写了一个博客 想推入 hostgator 我必须像 Hostgator 一样重新创建所有内容吗在 Hostgator 上安装 WordPress http www probloggingsuccess com instal
  • 如何在 C 中将向量参数传递给 OpenCL 内核?

    我在将向量类型 uint8 参数从 C 中的主机代码传递到 OpenCL 内核函数时遇到问题 在主机中 我将数据存储在数组中 cl uint dataArr 8 1 2 3 4 5 6 7 8 我的真实数据不仅仅是 1 8 这只是为了便于解