exponenta event banner

Оптимизация 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.

Похожие темы