Hello,
I'm now checking IPC Notify performance on C6678.
From my investigation, it takes at least 6009 CPU cycles (quite bigger number than I expected !) for the multicast -- Core0 sends notification to slave Cores (Core1-7) and each slave core acknowledges to the notification in their notify handlers (ISR context).
Here is a test code for your reference.
To try this code on your environment, group all cores and then run the executable on C6678 EVM.
As you see in this test code, Notify_sendEvent() is being called on master core to invoke each slave cores and I believe the overhead is taken by Notify API itself.
Please note :
- The test has been verified with Release build configuration.
- The last argument of Notify_sendEvent() is FALSE (no wait)
- L1D/L1P has been configured as full case and L2 is full SRAM. All code and data are fit on L2 except the buffer for receiving acknowledges from slave cores. It is placed on MSMC RAM
- Because I enabled cache, the result is being calculated by averaging the numbers for 100 time test iterations.
- If MYDEBUG definition is enabled, the benchmark will be started after sending all notifications. In this case I saw only 267 CPU cycles.
- RTSC versions (from mcsdk_2_01_02_06)
- IPC 1.24.3.32
- SYS/BIOS 6.33.6.50
- XDSTools : 3.23.4.60
Now questions:
- Do you think this test result is reasonable ? If not, do you have any idea to get better performance ?
- Do you have any way to invoke all slave cores per single Notify or something IPC API ?
- Do you have thinner API than Notify to invoke slave cores ?
Best Regards,
Naoki