memcpy Optimization
To optimize generated code that copies consecutive array elements, the code generator
tries to replace the code with a memcpy
call. A
memcpy
call can be more efficient than a
for
-loop or multiple, consecutive element assignments. This table
shows examples of generated C code with and without the memcpy
optimization.
Code Generated with memcpy Optimization | Code Generated Without memcpy Optimization |
---|---|
memcpy(&C[0], &A[0], 10000U * sizeof(double)); |
for (i0 = 0; i0 < 10000; i0++) { C[i0] = A[i0]; |
memcpy(&Z[0], &X[0],1000U * sizeof(double)); |
Z[0] = X[0]; Z[1] = X[1]; Z[2] = X[2]; ... Z[999] = X[999]; |
To enable or disable the memcpy
optimization:
At the command line, set the code configuration object property
EnableMemcpy
totrue
orfalse
. The default value istrue
.In the MATLAB® Coder™ app, set Use memcpy for vector assignment to
Yes
orNo
. The default value isYes
.
When the memcpy
optimization is enabled, the use of
memcpy
depends on the number of bytes to copy. The number of
bytes to copy is the number of array elements multiplied by the number of bytes required
for the C/C++ data type.
If the number of elements to copy is known at compile time, then the code generator produces a
memcpy
call only when the number of bytes is greater than or equal to thememcpy
threshold.If the number of elements is not known at compile time, then the code generator produces a
memcpy
call without regard to the threshold.
The default memcpy
threshold is 64 bytes. To change the threshold:
At the command line, set the code configuration object property
MemcpyThreshold
.In the MATLAB Coder app, set Memcpy threshold (bytes).
The memset
optimization also uses the
memcpy
threshold.
In certain cases, the code generator can produce a memcpy
call
without regard to the EnableMemcpy
or
MemcpyThreshold
parameters, or their equivalent settings in the
app.