หากมีการใช้ประเภทยาวที่มีลายเซ็นหรือไม่มีการรับรองในฟังก์ชันโค้ดโฮสต์ OpenCL™ clSetKernelArg() ตามที่แสดงด้านล่าง
ข้อมูลยาวที่ไม่มีการรับรอง = 1;
clSetKernelArg(kernel, 0, sizeof (ยาวไม่มีการรับรอง), (void*)&
จากนั้นข้อผิดพลาดต่อไปนี้อาจเกิดขึ้นเมื่อมีการคอมไพล์รหัสโฮสต์โดยใช้Intel® SDKสําหรับ OpenCL™
บริบทที่กระตุ้น: ขนาดที่ใช้ได้เปรียบคือขนาดที่ไม่ถูกต้อง
ข้อผิดพลาด: CL_INVALID_ARG_SIZE
ตําแหน่ง: host/src/main.cpp:91
ล้มเหลวในการตั้งค่า arg arg 0 เคอร์เนล
ข้อผิดพลาดนี้ไม่ปรากฏให้เห็นในกรณีนี้ในเวอร์ชั่นก่อนหน้า 18.1 ของIntel® SDKสําหรับ OpenCL™ ตอนนี้ข้อผิดพลาดปรากฏขึ้นเนื่องจากขนาดของประเภทยาวที่ไม่มีการรับรองเปลี่ยนจาก 8 เป็น 16 ในคอมไพเลอร์เคอร์เนลอ้างอิง แต่ host call sizeof (ไม่มีลายเซ็นยาว) ยังคงส่งคืน 8
ประเภทยาวที่ลงชื่อ / ไม่มีการรับรองไม่มีขนาดที่กําหนดในเวอร์ชั่น C99 หรือ OpenCL™ 1.X จึงอนุญาตให้โฮสต์และอุปกรณ์ใช้ขนาดที่แตกต่างกันสําหรับประเภท ดังนั้นไม่ควรใช้เป็นประเภทของเคอร์เนล เราไม่รับประกันว่าจะสามารถพกพาระหว่างคอมไพเลอร์ อุปกรณ์ หรือแม้แต่เวอร์ชันคอมไพเลอร์ได้ ในข้อมูลจําเพาะ OpenCL™ 2.0 จะมีการกําหนดประเภทยาวเป็น 128 บิต แต่ความไม่ชัดเจน C99 ยังคงอยู่ ข้อมูลจําเพาะ OpenCL™ ไม่ได้เพิ่มประเภทความเข้ากันได้ของ cl_* จึงไม่สามารถใช้ประเภทยาวเป็นมาตราส่วนอย่างปลอดภัย
การแก้ไขปัญหา ที่แนะนํา สําหรับปัญหานี้คือการใช้ประเภทที่กําหนดไว้ OpenCL™ เช่น cl_ulong/ไม่มีการรับรองนานในรหัสโฮสต์/อุปกรณ์ของคุณ
หรืออย่าใช้การเรียกใช้ sizeof() และบังคับให้ขนาดของคําบอกความยาวยาวมีขนาด 16 ไบต์ตามที่แสดงไว้ด้านล่าง
clSetKernelArg(kernel, 0, 16, (void*)&