【问题标题】:Work-items, Work-groups and Command Queues organization and memory limit in OpenCLOpenCL 中的工作项、工作组和命令队列组织和内存限制
【发布时间】:2011-03-15 01:06:03
【问题描述】:

好的,我已经阅读了大部分关于 OpenCL 的 ati 和 nvidia 指南,有些东西我只是想确定,有些需要澄清。文档中的任何内容都没有给出明确的答案。

现在我有一个 radeon 4650,现在在查询我的设备时,我得到了

  CL_DEVICE_MAX_COMPUTE_UNITS:  8
  CL_DEVICE_ADDRESS_BITS:  32
  CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
  CL_DEVICE_MAX_WORK_ITEM_SIZES: 128 / 128 / 128 
  CL_DEVICE_MAX_WORK_GROUP_SIZE: 128
  CL_DEVICE_MAX_MEM_ALLOC_SIZE:  256 MByte
  CL_DEVICE_GLOBAL_MEM_SIZE:  256 MByte

首先,我的卡有 1GB 内存,为什么我只能使用 256MB?

第二个我不明白工作项维度部分,这是否意味着我最多可以有 128*3 或 128^3 个工作项?

当我在运行查询之前计算这个时,我得到了 8 个内核 * 16 个流处理器 * 4 个工作项 = 512 为什么这是错误的?

我的 inte core 2 duo CPU 也有相同的 3 维工作项,是否适用相同的计算?

至于命令队列,当我尝试使用 OpenCL 作为设备访问我的核心双核 CPU 时,仅在一个核心上处理内容,我尝试执行多个队列并将多个条目排队,但仍然仅在一个核心上处理,我在一个简单的写入程序中使用了 128*128*128*8 的 global_work_size,其中每个工作项将自己的 global-id 写入缓冲区,我只得到零。

那么 Nvidia 卡呢?在具有 32 个 cuda 内核的 Nvidia 9500 GT 上,工作项的计算是否类似?

非常感谢,我真的到处寻找答案。

【问题讨论】:

    标签: opencl


    【解决方案1】:

    首先,我的卡有 1GB 内存,为什么 我只允许 256MB 吗?

    这是 ATI 驱动程序错误/限制 AFAIK。如果可以复制,我会检查我的 5850。

    http://devforums.amd.com/devforum/messageview.cfm?catid=390&threadid=124142&messid=1069111&parentid=0&FTVAR_FORUMVIEWTMP=Branch

    第二个我不明白工作项 维度部分,这是否意味着我可以 最多有 128*3 或 128^3 个工作项?

    没有。这意味着您最多可以在一个昏暗处拥有 128 个,因为 CL_DEVICE_MAX_WORK_ITEM_SIZES128 / 128 / 128。因为CL_DEVICE_MAX_WORK_GROUP_SIZE是128,你可以有,例如:work_group_size(128, 1, 1)work_group_size(1, 128, 1)work_group_size(64, 1, 2),或work_group_size(8, 4, 4)等,只要每个dim的乘积是<= 128就可以了。

    当我在运行之前计算这个时 查询,我得到了 8 个核心 * 16 个流 处理器 * 4 个工作项 = 512 为什么是 错了吗?

    我也有相同的 3 维 我的 inte core 2 duo 的工作项目 CPU,同样的计算是否适用?

    不明白你要在这里计算什么。

    【讨论】:

    • 首先非常感谢。嗯 nvm 512 部分,我将处理元素与工作项混淆了。至于 CPU,我想知道相同的计算是否也适用。如果是这样,我的 CPU 显示 1024 个工作组大小,这是否意味着它可以同时处理 1024 个工作项?
    • 如果 CPU 显示最大工作组大小为 1024,则适用相同规则。你可以有例如工作组大小为 128 * 8 * 1。现在关于工作项是否同时处理,这是由运行时抽象的,所以你真的不知道。
    • 您可能正在使用 ATI 的软件 OpenCL 实现(它报告 1024 作为最大工作组大小)。当然,一个 CPU 不能同时处理 1024 个工作项。据我所知,ATI 的软件 OpenCL 尽可能顺序地执行一个工作组的工作项。如果您访问共享内存,内核将被分成多个部分。奇怪的是,大小为 1 的工作组(应该在 CPU 上表现良好)在 ATI 的实现和我的代码中表现不佳。
    • @dietr:也许 ATI 正在为每个工作组执行 1 个操作系统线程?如果您有很多小型工作组(size=1),这可能会比更大的组(例如 size=256)产生更多的开销,这里只是推测。等待我的 phenom II x6 :)...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2021-03-12
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多