1. Structure
2. Resource
To support the use of dual NPUs, it is necessary to prepare the system environment and runtime environment of the C3V Dual EVB. Currently, two parts of the compressed packages are available:
system environment:
VSI SDK libraries:
and
2.1. System Environment
The system environment provides compressed packages:master_dual_npu_support.tar.gz. Which is contains two patch files. This patch is based on the following version:
https://github.com/sunplus-plus1/Q654.git
master: a8e7251a4bc175994ea31a968e1e35cf0b0cd8e8
Please apply patch modifications based on this version.
The two patch files are xboot and Linux:
master_dual_npu_linux.patch: The Linux patch file. The path is as follows: "Q654\linux\kernel".
master_dual_npu_xboot.patch: the xboot folder patch file. The path is as follows: "Q654\boot\xboot".
2.2. VSI SDK Libraries
The VSI SDK Libraries have been included in the compressed files:
galcore_sdk0.tar.gz:the galcore SDK library for NPU master: /dev/galcore
galcore_sdk1.tar.gz:the galcore SDK library for NPU slave: /dev/galcore1
When running the app, it is necessary to specify the link library path: LD_LIBRARY_PATH
3. Environmental Preparation
3.1 System
Please patch file modifications into the Xboot and Linux codes, and Compile the working environments for the master and slave separately. Reburn master and slave ISP_SD_BOOOT.img to micro SD card.
Execute the following command in the master Linux system:
cat /sys/kernel/debug/clk/clk_summary | grep "NPU_SLAVE"
When you see the following results, it indicates that the modifications to the Master kernel have taken effect.
NPU_SLAVE 0 0 0 500000000 0 0 50000
Please confirm that the Slave serial port prints the following log, which indicates that Slave CPU has been initialized
---- CPIO-R slave mode Begin ---- VCO: 4.0G, PLL: 1.0G PHY status change: 0x08000001 PHY status check Passed CPIO Initial Finished PHY Mode: 0x0000008D Timer start: 0x00000000 Timer End: 0x00000009 gic init ...
3.2 NPU Modules Compile
NPU Version choice v6.4.15.9. Compile master/slave modules
make kconfig > Device Drivers > Multimedia support > Media drivers > ML Inference Processor VIP9000_NPU > NPU Core choice
Compile Master NPU and Slave NPU separately once. After compilation, it can be done to generate two module files under the path of Linux/kernel/drivers/media/platform/deploy/vip9000/:
galcore0.ko:master NPU module;
galcore1.ko:slave NPU module;
3.3 Insmod Modules
Install the model using the following parameters:
insmod ./galcore0.ko powerManagement=1 mmuPageTablePool=0 major=199 insmod ./galcore1.ko powerManagement=1 mmuPageTablePool=0 major=200
Please change the permissions of the device node:
sudo chmod 666 /dev/galcore sudo chmod 666 /dev/galcore1
After successful installation, you can see it in the device list /dev/galcore and /dev/galcore1.
crw-rw-rw- 1 root root 199, 0 Nov 21 21:11 /dev/galcore crw-rw-rw- 1 root root 200, 0 Nov 21 21:11 /dev/galcore1
3.4. Run Process
Executing the required processes in the script is recommended. Different SDK paths can be specified in the script file.
master_npu_process.sh
export LD_LIBRARY_PATH=/path_to_sample_app:/path_to_galcore0_sdk ./sample_app
slave_npu_process.sh
export LD_LIBRARY_PATH=/path_to_sample_app:/path_to_galcore1_sdk ./sample_app