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

ทําไม #pragma ivdep ไม่ทํางานอย่างถูกต้องในเวอร์ชัน aocl 17.0

สิ่งแวดล้อม

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

    ใน 16.1 รหัสนี้ทํางานตามที่คาดหวังเมื่อลูปด้านนอกถูกอนุกรมเนื่องจากการขึ้นต่อกันและการขึ้นต่อกันของลูปด้านในถูกลบโดย ivdep #pragma

    ลูปนี้จะถูกอนุกรมเนื่องจากการขึ้นต่อกันอย่างแท้จริงกับลูปด้านใน

    สําหรับ (อักขระไม่มีลายเซ็น x = 0; x < 4; x ) {

    ลูปด้านในไม่มีการอ้างอิงระหว่างการคํานวณซ้ํา แต่ขึ้นอยู่กับลูปด้านนอก

    ivdep #pragma

    สําหรับ (อักขระ y ที่ไม่มีการรับรอง = 0; y<64; y ) {

    ใน 17.0 ตอนนี้ #pragma ivdep จะถูกนําไปใช้กับทั้งลูปด้านในและภายนอกดังนั้นการขึ้นต่อกันในลูปด้านนอกจะไม่ได้รับการลงบัญชีโดยคอมไพเลอร์  ส่งผลให้รหัสที่คล้ายกันอาจทํางานไม่ถูกต้องในฮาร์ดแวร์ที่ทํางานในการจําลอง

    ความละเอียด

    แก้ ปัญหา:

    1. เพิ่ม "dummy" ที่เพิ่มเข้ามาในเคอร์เนลเพิ่มเติม  ในด้านโฮสต์ ให้ส่ง 1 สําหรับข้อสรุปของหุ่นนี้เสมอ

    ก่อน

    my_kernelเป็นโมฆะ__kernel(
    อินพุตจํากัด__global cpx_t*
    ผลลัพธ์การจํากัด __global cpx_t*)

    หลัง

    my_kernelเป็นโมฆะ__kernel(
    อินพุตจํากัด__global cpx_t*
    ผลลัพธ์การจํากัด __global cpx_t*
        int dummy)

    2. ในลูปที่ตรงกลาง ให้ห่อหุ้มลูปด้านในใน "if (dummy)":

    ลูปนี้จะถูกอนุกรมเนื่องจากการขึ้นต่อกันอย่างแท้จริง

    สําหรับ (อักขระไม่มีลายเซ็น x = 0; x < 4; x ) {

    if (dummy) {

    ไม่มีการขึ้นต่อกันภายในแต่ละชุดของ 64 ครั้ง

    ivdep #pragma

    สําหรับ (อักขระ y ที่ไม่มีการรับรอง = 0; y<64; y ) {

     

    ปัญหานี้ได้รับการกําหนดเวลาให้แก้ไขใน Intel© OpenCL™ เวอร์ชันในอนาคตสําหรับ SDK FPGA

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

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

    Intel® Arria® 10 FPGA และ SoC FPGA
    Intel® Stratix® 10 FPGA และ SoC FPGA
    Cyclone® V FPGA และ SoC FPGA
    Arria® V FPGA และ SoC FPGA
    Stratix® V FPGA

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