Оптимизация 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 'Порог' .

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

Похожие темы