Note |
---|
Notice: Pre-Release Documentation |
This section contains some performance benchmarks for this release. During the measurements, processor clock and DDR speeds were set to maximum.
Interprocessor Communication
This is the measured MHz to transfer 16 channels of 32-bit data at 48 kHz between cores. Transfers were done with 1 msec blocks. This test uses the ChangeThread module and part of the reported MHz is on the sending core and part is on the receiving core.
...
When sending data between different cores, it is going through the carveout shared memory. When sending audio between the same core, this means that data is going to another hardware thread on the same core and non-shared is used.
TDM I/O
The limiting factor for serial port I/O is the speed of the LP DMA memory. This is 85 MB/second for reading and 170 MB/second for writing. These tests were with 48 sample block sizes.
...
Block Size (samples) | Total Latency (msec) | Analog Latency (msec) | Digital Latency (msec) |
12 | 1.6 | 1.1 | 0.5 |
24 | 2.1 | 1.1 | 1.0 |
48 | 3.1 | 1.1 | 2.0 |
In R4.1 provide measures with Synchronous Unaligned Ports
ALSA I/O
This test measures the overhead of streaming audio data between the HLOS and Audio Weaver. 16 channels of data streamed at 48 kHz. 1 msec block size in Audio Weaver and a 10 msec block size at the HLOS.
...
An application was running on the HLOS which would read the ALSA Source and send it to the ALSA Sink. A 48 kHz sample rate was used throughout and Audio Weaver was processing at a 48 sample block size. The HLOS application was using a 240 sample block size. The ALSA settings used in the test were:
ALSA Sink
Buffer size: 960 samples
Block size: 240 samples
startThreshold: 0 samples
stopThreshold: 0 samples
ALSA Source
Buffer size: 960 samples
Block size: 240 samples
startThreshold: 480 samples (prefill to avoid underruns)
stopThreshold: 0 samples
...
ALSA Settings | Measured | |||
Sample Rate | Block Size | Buffer Size | Latency (msec) | |
8000 | 80 | 160 | 18.2 | |
11025 | 120 | 240 | 21.6 | |
12000 | 120 | 240 | 21.8 | |
16000 | 160 | 320 | 15.6 | |
22050 | 220 | 440 | 20.0 | |
24000 | 240 | 480 | 15.4 | |
32000 | 320 | 640 | 17.8 | |
44100 | 480 | 960 | 19.8 | |
48000 | 480 | 960 | 16.2 |
Maximum CPU Loading
In this test, we used the BiquadLoading module to load each thread in the system. We measured how many Biquad stages we could run before we started having CPU overruns. We used a 1 msec block size on the Hexagon DSPs and a 10 msec block size on the Arm. This test measures code and framework efficiency.
ADSP
ThreadBiquadStages | Biquad Stages | % Loading |
1A | 1600 | 95% |
1B | 1720 | 95% |
1C | 1720 | 95% |
1D | 1720 | 95% |
GPDSP0
ThreadBiquadStages | Biquad Stages | % Loading |
1A | 2000 | 90% |
1B | 2000 | 90% |
1C | 2000 | 90% |
1D | 2000 | 90% |
1E | 2000 | 90% |
1F | 2000 | 90% |
GPDSP1
ThreadBiquadStages | Biquad Stages | % Loading |
1A | 2000 | 90% |
1B | 2000 | 90% |
1C | 2000 | 90% |
1D | 2000 | 90% |
1E | 2000 | 90% |
1F | 2000 | 90% |
Arm (only loaded a single thread)
ThreadBiquadStages | Biquad Stages | % Loading |
10A | 5000 | 50% |
Early Audio KPIs
In release R4.0, we are not able to fully measure this KPI. However, we were able to measure the Audio Weaver contribution to the boot time. We instrumented the code and measured the time that the main() function was reached on the ADSP until the time that real-time audio interrupts started.
...
The time from the ADSP booting until GPDSP0 and GPDSP1 are ready to generate audio is 27.5 msec.
1 Unless, of course, you want to write your own custom modules that execute on the Hexagon.
5 This is how varying sample rates are handled in Audio Weaver. The buffers are oversized for the worst case transfer size and side information - in the timing information pins - is used to regulate the flow.
6 The discussion here is based on block times which are easier to follow. The actual configuration is based on block sizes.
4 This is a new feature which was recently implemented in Audio Weaver. If your design has custom modules, then you may need to add a custom resetState function.
2 The objectID of this SourceInt module is specified in the system configuration file.
3 You will also need a Matlab license. We recommend Matlab 2022b.