[英]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 );
任何想法可能出什么問題嗎?
謝謝。
設備屬性:(設備的通用上限)
內核屬性:(編譯的設備內核的特定限制)
第一個對每個設備進行了硬編碼,並且可能受到在完全SIMD模式下可以尋址多少個項目的限制。
第二個限制是每個內核,這是您應該使用的限制。 這一節考慮了更多特定於您代碼的內容。 像最大的私人內存,等等...
您是否也滿足第二個要求?
順便說一句:在任何情況下,您都應該使用:
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[2] = { 1, 512 };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.