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

Чтобы оптимизировать сгенерированный код, который копирует последовательные элементы массива, генератор кода пытается заменить код на вызов memcpy. Вызов 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 или их эквивалентным настройкам в приложении.

Похожие темы