Why do I get an assertion failure from malloc_ddr?

Application execution fails with the following error message:

tidl: device_alloc.h:31: T* tidl::malloc_ddr(size_t) [with T = char; size_t = unsigned int]: Assertion `val != nullptr' failed

Allocations not freed

One possible reason is that previous runs of the application were aborted (e.g. using Ctrl-C) and did not release their allocations. Use the ti-mct-heap-check command with “-c” option to clean up.

root@am57xx-evm:~# ti-mct-heap-check -c
-- ddr_heap1 ------------------------------
   Addr : 0xa2000000
   Size : 0xa000000
   Avail: 0xa000000
   Align: 0x80

Insufficient OpenCL global memory

Another possible reason is that total memory requirement specified in the Configuration using NETWORK_HEAP_SIZE and PARAM_HEAP_SIZE exceeds default memory available for OpenCL. Follow the instructions below to increase the amount of CMEM (contiguous memory available for OpenCL) from 192MB (0xc000000) to 384MB (0x18000000):

$ sudo apt-get install device-tree-compiler # In case dtc is not already installed
$ scp root@am57:/boot/am57xx-evm-reva3.dtb .
$ dtc -I dtb -O dts am57xx-evm-reva3.dtb -o am57xx-evm-reva3.dts
$ cp am57xx-evm-reva3.dts am57xx-evm-reva3.dts.orig
$ # increase cmem block size
$ diff -u am57xx-evm-reva3.dts.orig am57xx-evm-reva3.dts
--- am57xx-evm-reva3.dts.orig    2018-01-11 14:47:51.491572739 -0600
+++ am57xx-evm-reva3.dts    2018-01-16 15:43:33.981431971 -0600
@@ -5657,7 +5657,7 @@

         cmem_block_mem@a0000000 {
-            reg = <0x0 0xa0000000 0x0 0xc000000>;
+            reg = <0x0 0xa0000000 0x0 0x18000000>;
             status = "okay";
             linux,phandle = <0x13c>;
@@ -5823,7 +5823,7 @@
         cmem_block@0 {
             reg = <0x0>;
             memory-region = <0x13c>;
-            cmem-buf-pools = <0x1 0x0 0xc000000>;
+            cmem-buf-pools = <0x1 0x0 0x18000000>;

         cmem_block@1 {
$ dtc -I dts -O dtb am57xx-evm-reva3.dts -o am57xx-evm-reva3.dtb
$ scp am57xx-evm-reva3.dtb root@am57:/boot/
# reboot to make memory changes effective (run "cat /proc/iomem" to check)

For further details, refer the OpenCL User’s Guide, section Changing DDR3 Partition for OpenCL