簡體   English   中英

在矩陣運算上獲取CL_INVALID_WORKGROUP_SIZE

[英]Getting CL_INVALID_WORKGROUP_SIZE on matrix operations

我傳入一個矩陣作為全局內存,並處理本地內存中的每個向量(行)。 傳入的實際矩陣為100 X 2025,但在內核中,我將其填充為零以利用2運算的冪。 我在每個工作項中處理矢量的4個元素。

MAX_WORK_ITEM_SIZES:(512,512,512)MAX_WORK_GROUP_SIZE:512

size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[1] = { 512 };

我也嘗試過將localWorkSize設為2維:{1,512},但在此函數調用上遇到了相同的錯誤CL_INVALID_WORKGROUP_SIZE:

err = clEnqueueNDRangeKernel( openCLObjects.queue, openCLObjects.Normalize, 2, NULL,
                    globalWorkSize, localWorkSize, 0, NULL, NULL );

任何想法可能出什么問題嗎?

謝謝。

設備屬性:(設備的通用上限)

  • MAX_WORK_ITEM_SIZES:每個維度中工作組中的最大工作項。
  • MAX_WORK_GROUP_SIZE:工作組中最大的工作項總數(所有尺寸大小的乘積)。

內核屬性:(編譯的設備內核的特定限制)

  • CL_KERNEL_WORK_GROUP_SIZE:最大工作組項目總數(所有尺寸大小的乘積)

第一個對每個設備進行了硬編碼,並且可能受到在完全SIMD模式下可以尋址多少個項目的限制。

第二個限制是每個內核,這是您應該使用的限制。 這一節考慮了更多特定於您代碼的內容。 像最大的私人內存,等等...

您是否也滿足第二個要求?

順便說一句:在任何情況下,您都應該使用:

size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[2] = { 1, 512 };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM