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

ทําไมการคอมไพล์เคอร์เนล OpenCL ของฉันล้มเหลวในการสร้างฮาร์ดแวร์แม้ว่าทรัพยากรโดยประมาณจะต่ํา

สิ่งแวดล้อม

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

    หากเคอร์เนล OpenCL™ ของคุณไม่สามารถสร้างฮาร์ดแวร์ได้แม้ว่าทรัพยากรโดยประมาณจะต่ํา แต่ความล้มเหลวอาจเกิดจากการยกเลิกการวนรอบที่เข้าถึงหน่วยความจําทั่วโลกมากเกินไป

    ไม่ควรยกเลิกการใช้ลูปที่เข้าถึงหน่วยความจําส่วนกลางนอกเหนือไปจากที่ที่มีการอ่านหรือเขียนไปยังหน่วยความจําส่วนกลางกว้างกว่าอินเทอร์เฟซหน่วยความจําใน BSP  ซึ่งอาจทําให้เกิดความคับคั่งการกําหนดเส้นทาง และอาจส่งผลให้การคอมไพล์ล้มเหลว

    ความละเอียด

    ความกว้างของอินเทอร์เฟซหน่วยความจําภายนอกสามารถพบได้ในไฟล์ board_spec.xml ใน OpenCL™ BSP  นี่เป็นตัวอย่างจาก board_spec.xml ของชุดพัฒนา GX Arria 10 BSP (a10_ref)

    width="512" maxburst="16" address="0x00000000" size="0x80000000" latency="240"/>


    อย่างที่คุณเห็น ความกว้างของอินเทอร์เฟซหน่วยความจําภายนอกบน BSP นี้คือ 512 บิต (width="512") ดังนั้น หากลูปเข้าถึงจํานวนเต็ม 32 บิตทั่วโลก ไม่ควรยกเลิกการวนรอบมากกว่า 16 (512 / 32 = 16)

    หากจํานวนลูปเดิมไม่ใช่ตัวคูณของ 16:

    1. ปัดเศษจํานวนลูปใหม่เป็นตัวคูณของ 16

    2. ทําให้หน่วยความจําบนชิปมีขนาดใหญ่พอที่จะรองรับจํานวนลูปใหม่ได้

    3. ใช้เงื่อนไขเพื่อป้องกันการอ่านหรือเขียนเมื่อจํานวนลูปใหม่เกินจํานวนลูปเดิม

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

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

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

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