Сравнительные тесты раньше тестировали средство выделения C++ и C?

Консультируйте по вопросам сравнительных тестов, используемых для тестирования средства выделения C++ и C? Сравнительные тесты, удовлетворяющие любой из следующих аспектов, рассматривают:

  1. Скорость
  2. Фрагментация
  3. Параллелизм

Спасибо!

8
задан Viet 1 April 2010 в 12:04
поделиться

3 ответа

Если вы спросите об общем распределителе для программы C / C ++, то я нашел эту статью Hoard: масштабируемый распределитель памяти для многопоточных приложений , в которой рассматривается этот вопрос. Это цитата из этого документа

Пока еще нет стандартного набора тестов для оценки многопоточных распределителей. Нам неизвестны тесты, которые специально подчеркивали бы многопоточную производительность серверных приложений, таких как веб-серверы 1 и менеджеры баз данных. Мы выбрали тесты , описанные в других документах и ​​ опубликованные иным образом (тест Larson от Larson and Krishnan [22] и тест shbench от {{1}) } MicroQuill, Inc. [26]), два многопоточных приложения, которые включают тесты производительности (BEMengine [7] и barnes-hut [1, 2]), а также написали несколько собственные микротесты для выявления различных аспектов выделения памяти производительности (threadtest, active-false, passive-false).

Эта статья вроде как старая. Однако недавно я видел распределитель для HP-UX ( MallocNextGen ), и HP также не может гарантировать, что он подходит для всех возможных приложений. В нем говорится:

Как правило, ожидается, что новый распределитель повысит производительность приложений. Однако могут быть некоторые приложения, для которых производительность может снизиться. Поэтому пользователям рекомендуется протестировать свои приложения с распределителем памяти по умолчанию в libc и с распределителем в libmallocng перед использованием нового распределитель в производственной среде .

Что касается скорости и параллелизма, мой собственный опыт показывает, что вам нужно измерить производительность вашей собственной программы, чтобы сравнить два разных распределителя. Если мы говорим о Linux, вы можете использовать LD_PRELOAD для загрузки различных распределителей.

4
ответ дан 5 December 2019 в 10:40
поделиться

Вы можете загрузить nedmalloc и попытаться сравнить с ним свой распределитель. У него есть тест под названием test.c с исходным кодом, который вы можете переписать в соответствии с вашим распределителем.

5
ответ дан 5 December 2019 в 10:40
поделиться

Несколько лет назад я сам тестировал несколько аллокаторов, и мой опыт показывает, что результаты зависят от типа теста. Если вы хотите написать несколько тестов самостоятельно, рассмотрите следующие ситуации:

  • выделить много памяти одного размера, затем освободить ее всю
  • выделить много памяти разных размеров, затем освободить ее всю
  • выделить только несколько блоков памяти, освободить их и повторить этот цикл несколько раз (повторить для блоков одинакового размера и блоков разного размера)
  • выделить много памяти разного размера, освободить половину (например, четные выделения), затем выделить и освободить память в цикле
  • выделить много памяти разного размера, освободить половину (например, нечетные выделения). 124]используйте два потока для параллельного выделения памяти
  • используйте три, четыре, пять, ... потоков для параллельного выделения памяти

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

На практике это означает, что лучше всего протестировать его в вашем приложении, в реальной ситуации.

7
ответ дан 5 December 2019 в 10:40
поделиться