ควบคุมการไหล

เริ่มต้นจาก Android 11 NNAPI รวมถึงทั้งสองดำเนินการควบคุมการไหล, IF และ WHILE ที่รุ่นอื่น ๆ ใช้เป็นข้อโต้แย้งและดำเนินการได้ตามเงื่อนไข ( IF ) หรือซ้ํา ๆ ( WHILE ) ซึ่งช่วยให้สามารถสร้างแบบจำลองที่ดำเนินการต่าง ๆ ตามค่าอินพุตหรือดำเนินการหลายครั้งโดยไม่ต้องคลี่คลาย นี่เป็นสิ่งสำคัญสำหรับกรณีการใช้งาน เช่น RNN แบบไดนามิกและ seq2seq

ใน NN HAL 1.3 โมเดลนี้รวมกราฟย่อยหลายรายการ รวมถึงกราฟย่อยหลักที่ใช้สำหรับระบุอินพุตและเอาต์พุตของการดำเนินการ subgraph สามารถอ้างอิง subgraphs อื่น ๆ โดยใช้ตัวถูกดำเนินการประเภท SUBGRAPH เฟรมเวิร์กสามารถส่งการดำเนินการควบคุมโฟลว์ไปยังตัวเร่งความเร็วได้ก็ต่อเมื่อตัวเร่งความเร็วสนับสนุนการดำเนินการทั้งหมดในกราฟย่อยทั้งหมดที่อ้างอิงโดยการดำเนินการโฟลว์การควบคุมนั้น

อินเทอร์เฟซ HAL

ใน NN HAL 1.3 นิยามที่เกี่ยวข้องกับการควบคุมการไหลอยู่ใน types.hal

  • IF และ WHILE ประเภทการดำเนินงาน
  • SUBGRAPH ถูกดำเนินการชนิดและที่สอดคล้อง SUBGRAPH อายุการใช้งานถูกดำเนินการ
  • Model โครงสร้างที่ประกอบด้วยหลัก subgraph และรายชื่อของ subgraphs อ้างอิง
  • Capabilities โครงสร้างที่มี ifPerformance และ whilePerformance

IDevice.hal มี IDevice ซึ่งวิธี getSupportedOperations_1_3() ต้องปฏิบัติต่อ IF และ WHILE แตกต่างจากการดำเนินงานอื่น ๆ

IPreparedModel.hal มี IPreparedModel ซึ่งวิธีการ execute_1_3() , executeSynchronously_1_3() และ executeFenced() ใช้ตัวเลือก loopTimeoutDuration โต้แย้ง

การใช้งานไดรเวอร์

สำหรับการดำเนินงานการดำเนินงานตัวอย่างให้ดู CpuExecutor::executeIfOperation และ CpuExecutor::executeWhileOperation สำหรับการตรวจสอบการดำเนินการตรรกะตัวอย่างให้ดู validateIfOperation() และ validateWhileOperation()

หมายเหตุว่ามันเป็นสิ่งสำคัญที่จะสนับสนุนการดำเนินการทางคณิตศาสตร์และการเปรียบเทียบสินค้าใน TENSOR_INT32 ตัวถูกดำเนินการของรูปร่าง 1 เป็นเหล่านี้สามารถใช้เป็นเคาน์เตอร์ห่วง ในทำนองเดียวกันการดำเนินงานการผลิต TENSOR_BOOL8 ตัวถูกดำเนินการของรูปร่าง 1 ควรจะใช้กับ IF และ WHILE เงื่อนไข

ขณะหมดเวลาดำเนินการวนซ้ำ

เพื่อป้องกันไม่ให้ลูปไม่มีที่สิ้นสุดการดำเนินการจะต้องถูกยกเลิกถ้า WHILE วงจะใช้เวลานานกว่า loopTimeoutDuration ค่าส่งผ่านไปยังโทรของ IPreparedModel::execute_1_3() , IPreparedModel::executeSynchronously_1_3() หรือ IPreparedModel::executeFenced() (หรือค่าเริ่มต้น หากละเว้น)

การตรวจสอบความถูกต้อง

การทดสอบโฟลว์ควบคุมเป็นส่วนหนึ่งของชุดทดสอบ CTS และ VTS สำหรับข้อมูลเพิ่มเติมโปรดดูที่ การตรวจสอบ