หากเคอร์เนล 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. ใช้เงื่อนไขเพื่อป้องกันการอ่านหรือเขียนเมื่อจํานวนลูปใหม่เกินจํานวนลูปเดิม