ID บทความ: 000086479 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 13/12/2018

ทําไมฉันจึงได้รับข้อผิดพลาด "CL_INVALID_ARG_SIZE" เมื่อใช้ประเภทยาวตราบเท่าที่เคอร์เนล OpenCL™ อยู่ในรหัสโฮสต์

สิ่งแวดล้อม

  • Intel® Quartus® Prime Standard Edition
  • Intel® Quartus® Prime Pro Edition
  • เอฟพีจีเอ Intel® SDK สำหรับ OpenCL™
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    คำอธิบาย

    หากมีการใช้ประเภทยาวที่มีลายเซ็นหรือไม่มีการรับรองในฟังก์ชันโค้ดโฮสต์ 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*)&

    ผลิตภัณฑ์ที่เกี่ยวข้อง

    บทความนี้จะนำไปใช้กับ 1 ผลิตภัณฑ์

    อุปกรณ์ที่ตั้งโปรแกรมได้ Intel®

    เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้