Оптимизация memcpy

Чтобы оптимизировать сгенерированный код, который копирует последовательные элементы массива, генератор кода пытается заменить код на memcpy вызов. A memcpy вызов может быть более эффективным, чем for-цикл или несколько последовательных назначений элементов. В этой таблице показаны примеры сгенерированного кода C с memcpy и без него оптимизация.

Код, сгенерированный с оптимизацией memcpyКод сгенерирован без оптимизации memcpy
 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];

Чтобы включить или отключить memcpy оптимизация:

  • В командной строке установите свойство объекта строения кода EnableMemcpy на true или false. Значение по умолчанию true.

  • В MATLAB® Coder™ приложения установите Use memcpy for vector assignment равным Yes или No. Значение по умолчанию Yes.

Когда memcpy оптимизация включена, использование memcpy зависит от количества байтов, которые нужно копировать. Количество байтов для копирования - это количество элементов массива, умноженное на количество байтов, необходимое для типа данных C/C + +.

  • Если количество элементов для копирования известно во время компиляции, то генератор кода производит memcpy вызов только, когда количество байтов больше или равно memcpy порог.

  • Если количество элементов не известно во время компиляции, то генератор кода производит memcpy вызов без учета порога.

Дефолт memcpy порог составляет 64 байта. Чтобы изменить порог:

  • В командной строке установите свойство объекта строения кода MemcpyThreshold.

  • В приложении MATLAB Coder установите Memcpy threshold (bytes).

memset оптимизация также использует memcpy порог.

В некоторых случаях генератор кода может произвести memcpy вызов без учета EnableMemcpy или MemcpyThreshold параметры или их эквивалентные настройки в приложении.

Похожие темы