Оптимизация мемсета

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

Код, сгенерированный оптимизацией мемсетаКод сгенерирован без оптимизации мемсета
 memset(&Y[0], 125, 100U * sizeof(signed char));
for (i = 0; i < 100; i++) {
    Y[i] = 125;
memset(&Z[0], 0, 1000U * sizeof(double));
Z[0] = 0.0;
Z[1] = 0.0;
Z[2] = 0.0;
...
Z[999] = 0.0;

Генератор кода может использовать memset оптимизация для назначения целочисленной константы или нуля с плавающей точкой. Использование memset зависит от:

  • Размер присваиваемого значения. Размер должен соответствовать требованиям для memset C/C + + вызов.

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

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

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

memset порог оптимизации совпадает с порогом оптимизации memcpy оптимизационный порог. Значение по умолчанию порог 64 байта. Чтобы изменить порог:

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

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

Для назначения нуля с плавающей точкой, чтобы включить или отключить memset оптимизация:

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

  • В приложении MATLAB Coder установите Use memset to initialize floats and doubles to 0.0 равным Yes или No. Значение по умолчанию Yes.

Похожие темы