The use of statically allocated memory avoids the need for synchronization, but prevents the system from adjusting its memory resource usage dynamically.
Having the CPU block and wait until the co-processor has finished performing each operation is possible, but this substantially reduces parallelism and hence reduces overall system performance.