Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Оптимизация производительности мультипоточного приложения на Delphi XE2-XE7 с помощью Intel TBB

Delphi , Компоненты и Классы , Потоки

Оптимизация производительности мультипоточного приложения на Delphi XE2-XE7 с помощью Intel TBB

При работе с мультипотоковыми приложениями на Delphi XE2-XE7, разработчики могут столкнуться с проблемой, когда производительность не увеличивается с добавлением новых потоков. Это может быть связано с различными факторами, включая нагрузку на менеджер памяти и блокировки синхронизации. Одним из решений для улучшения производительности является использование Intel Threading Building Blocks (TBB) в качестве альтернативы встроенному менеджеру памяти в Delphi.

Оригинальный заголовок

Почему мультипотоковое приложение с интенсивной выделение/освобождение памяти не масштабируется с увеличением числа потоков?

Контекст и решение проблемы

В контексте обсуждения проблемы было замечено, что мультипотоковое приложение на Delphi XE2, использующее DWScript для разбора JSON, не масштабируется при увеличении числа потоков. Основной причиной проблемы оказался не сам разбор JSON, а недостатки встроенного менеджера памяти в Delphi. Решением стало использование менеджера памяти от Intel TBB, который обеспечивает линейное масштабирование производительности до 16 потоков в 64-битной версии приложения.

Подтвержденный ответ

Использование менеджера памяти от Intel TBB позволяет достичь линейного масштабирования производительности мультипотокового приложения. Это было подтверждено на тестовых системах с различным количеством ядер и потоков, работающих под управлением виртуализированной Windows 7.

Пример кода

Для интеграции TBB в проект на Delphi, необходимо добавить соответствующие функции управления памятью в начало списка используемых единиц в файле dpr:

unit TBBMem;

interface

function ScalableGetMem(ASize: NativeInt): Pointer; cdecl; external 'tbbmalloc' name 'scalable_malloc';
procedure ScalableFreeMem(APtr: Pointer); cdecl; external 'tbbmalloc' name 'scalable_free';
function ScalableReAlloc(APtr: Pointer; Size: NativeInt): Pointer; cdecl; external 'tbbmalloc' name 'scalable_realloc';

implementation

Function TBBGetMem(ASize: Integer): Pointer;
begin
  result := ScalableGetMem(ASize);
end;

Function TBBFreeMem(APtr: Pointer): Integer;
begin
  ScalableFreeMem(APtr);
  result := 0;
end;

Function TBBReAllocMem(APtr: Pointer; ASize: Integer): Pointer;
begin
  result := ScalableRealloc(APtr, ASize);
end;

const
  TBBMemoryManager: TMemoryManager = (GetMem: TBBGetMem; FreeMem: TBBFreeMem; ReAllocMem: TBBReAllocMem);

var
  oldMemoryManager: TMemoryManager;

initialization
  GetMemoryManager(oldMemoryManager);
  SetMemoryManager(TBBMemoryManager);

finalization
  SetMemoryManager(oldMemoryManager);

end.

Заключение

Переход на менеджер памяти от Intel TBB является эффективным способом улучшения производительности мультипотоковых приложений в Delphi XE2-XE7, особенно при интенсивном выделении и освобождении памяти. Это решение позволило достичь стабильного и предсказуемого масштабирования производительности при увеличении количества потоков.

Создано по материалам из источника по ссылке.

Описание: Оптимизация производительности мультипоточного приложения на Delphi XE2-XE7 с использованием Intel TBB для улучшения масштабирования и устранения проблем с управлением памятью.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Потоки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:24:37/0.0032980442047119/0