根据OpenCL中的设备内存确定最大全局工作组大小?

问题描述 投票:6回答:1

我能够列出以下参数,这些参数有助于根据设备内存限制设备的工作项:

  • CL_DEVICE_GLOBAL_MEM_SIZE
  • CL_DEVICE_LOCAL_MEM_SIZE
  • CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE
  • CL_DEVICE_MAX_MEM_ALLOC_SIZE
  • CL_DEVICE_MAX_WORK_GROUP_SIZE
  • CL_DEVICE_MAX_WORK_ITEM_SIZES
  • CL_KERNEL_WORK_GROUP_SIZE

我发现这些参数的explanation不足,因此无法正确使用这些参数。有人可以告诉我这些参数的含义以及如何使用它们。是否需要检查所有这些参数?

PS:我对某些参数有一些简短的了解,但不确定我的理解是否正确。

opencl
1个回答
9
投票

CL_DEVICE_GLOBAL_MEM_SIZE:

  • 设备的全局内存量。您通常不在乎,除非您使用大量数据。无论如何,如果您使用了超出允许的数量,则OpenCL规范将抱怨OUT_OF_RESOURCES错误。 (字节)

CL_DEVICE_LOCAL_MEM_SIZE:

  • 每个工作组的本地内存量。但是,此限制仅在理想条件下。如果您的内核每WG使用大量WI,则可能某些私有WI数据正溢出到本地内存中。因此,将其作为每个WG的最大可用量。

CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:

  • 可用于单个内核的最大恒定内存量。如果您使用的常量缓冲区的总和超过该数量,则它将失败或使用全局普通内存(因此可能会更慢)。 (字节)

CL_DEVICE_MAX_MEM_ALLOC_SIZE:

  • 您可以在一台设备中分配的最大内存量(单件)。 (字节)

CL_DEVICE_MAX_WORK_GROUP_SIZE:

  • 设备的最大工作组大小。这是理想的最大值。根据内核代码,限制可能会更低。

CL_DEVICE_MAX_WORK_ITEM_SIZES:

  • 每个维度的最大工作项数量。 IE:设备最大尺寸可能为1024 WI,最大尺寸可能为3。但是您可能无法使用(1024,1,1)作为大小,因为它可能限制为(64,64,64),因此,例如,您只能使用(64,2,8)。

CL_KERNEL_WORK_GROUP_SIZE:

  • 实现提供的默认内核大小。可能会强制将其设置为更高或更低,但是已经提供的值应该已经是一个不错的值(GPU使用率%的良好权衡,内存溢出等)。

注意:所有这些数据均为理论极限。但是,如果您的内核使用的资源多于其他资源,即:本地内存取决于工作组的大小,则您可能无法达到每个工作组的最大工作项,因为您有可能首先达到本地内存限制。

© www.soinside.com 2019 - 2024. All rights reserved.