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

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

Код, Сгенерированный с memset ОптимизациейКод, Сгенерированный Без 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.

Похожие темы