Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
wolverin
а как вы вообще определили тогда что в диск не упирается?

так что если отключить запись на ССД!(файла после анализа в другой каталог. и удаление его же из основного каталога) то ничего не меняется
1 авг 19, 11:22    [21939628]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
файлов сотни тысяч, размер от 1000 байт

2 года назад начали тут наши сотрудничать с одним "рукоблудом", который для неких задач управления удаленными устройствами закодил gsm/gprs модемы, все это дело управлялось через файлы на ftp, я им еще тогда сказал - пока вы там на коленке обслуживаете "пару" садоводческих товариществ - вы не упираетесь в проблему количества мелких файлов на серваке, это ущербная логика
не поверили, ну и что - теперь переделали на mysql, не так давно меня пытались убедить что надо формировать 10 тык мелких файлов, чем 1 со всеми данными )

так что открывайте хотя бы штатный системный монитор и смотрите счетчики диска - вам не зря сразу об этом написали.
1 авг 19, 11:25    [21939636]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Дегтярев Евгений
Pcrepair,

возьми уже профайлер


Я то возьму, но где? и что это такое?
1 авг 19, 11:27    [21939643]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
так что если отключить запись на ССД!

ну видимо записи сотни тысяч не осуществляется и тут переполнение очереди записи нет, однако проблема с диском у вас никуда не делась.
1 авг 19, 11:27    [21939644]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3624
Pcrepair
операции с памятью... если потоков 2 тогда 15 мб, если 100 тогда 0.8...1.3 гб(но без сбоев)

Дело не в количестве потребляемой памяти, а в частоте выделения/освобождения.
1 авг 19, 11:40    [21939668]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10408
Pcrepair
wolverin
а как вы вообще определили тогда что в диск не упирается?

так что если отключить запись на ССД!(файла после анализа в другой каталог. и удаление его же из основного каталога) то ничего не меняется
У Вас с логикой совсем плохо или Вы про быстродействие без чтения просто написали не проверяя?
Запись на диск может быть асинхронной, а чтение файла целиком - нет. Удаление без корзины - операция, практически не требующая дисковой активности.
1 авг 19, 11:59    [21939708]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Uridian
Member

Откуда: Lobnya
Сообщений: 210
Pcrepair
программа для обработки текстовых файлов
поток считывает файл, изучает содержимое
загрузка процессора 11-13%

По моему опыту, наиболее вероятная причина:
Kazantsev Alexey
Много операций с памятью, всё упирается в однопоточный менеджер памяти

Моя рекомендация, исключить все операции, изменяющие переменные типа string, (и другие явные/неявные операции выделения памяти, если они есть), по крайней мере из тела цикла.
1 авг 19, 12:55    [21939757]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47957

Uridian
Моя рекомендация, исключить все операции, изменяющие переменные типа string, (и другие
явные/неявные операции выделения памяти, если они есть), по крайней мере из тела цикла.

Или использовать фиксированные буфера вместо строк.

Posted via ActualForum NNTP Server 1.5

1 авг 19, 13:07    [21939775]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10408
Uridian
Моя рекомендация, исключить все операции, изменяющие переменные типа string, (и другие явные/неявные операции выделения памяти, если они есть), по крайней мере из тела цикла.
Прежде чем давать такие рекомендации нужно, действительно, профилирование запустить.
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти. Хотя, конечно, встречаются талантливые люди...
1 авг 19, 13:10    [21939780]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3624
Соколинский Борис
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти

IntToStr, и вот тебе пожалуйста...
1 авг 19, 13:15    [21939790]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Kazantsev Alexey
Соколинский Борис
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти

IntToStr, и вот тебе пожалуйста...


в коде потока и вызываемых потоком функций IntToStr нет
1 авг 19, 14:27    [21939895]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 25729
Pcrepair
Kazantsev Alexey
пропущено...

IntToStr, и вот тебе пожалуйста...


в коде потока и вызываемых потоком функций IntToStr нет

Ну вот, одну интригу загубил...
1 авг 19, 14:30    [21939899]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7779
wadman
Но код лучше не показывать, т.к. гадать намного интереснее.

+++

Дегтярев Евгений
возьми уже профайлер

---

Не спортивно. Так будет не интересно
1 авг 19, 14:49    [21939920]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 821
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?
запустить 8 экземпляров программы. не, ну а чоКартинка с другого сайта.
1 авг 19, 14:55    [21939927]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
Соколинский Борис
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти. Хотя, конечно, встречаются талантливые люди
его может быть столько неявного что ни в чем неповинный, но просто неискушенный пользователь и знать не увидит сколько на пустом казалось бы месте огребает, пока на ассемблерный код не посмотрит, либо профайлер или кто еще не подскажет
1 авг 19, 15:04    [21939932]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3624
Pcrepair
в коде потока и вызываемых потоком функций IntToStr нет

Ну чего в угадайку-то играть...
+ Простейший способ...

unit tracemm;

interface

threadvar

 AllocMemCount   : NativeInt;
 ReallocMemCount : NativeInt;
 FreeMemCount    : NativeInt;

implementation

var

 OldMM : TMemoryManagerEx;
 NewMM : TMemoryManagerEx;

function NewGetMem(Size : NativeInt) : Pointer;
begin

 Inc(AllocMemCount);

 Result := OldMM.GetMem(Size);

end;

function NewFreeMem(P : Pointer): Integer;
begin

 Inc(FreeMemCount);

 Result := OldMM.FreeMem(P);

end;

function NewReallocMem(P : Pointer; Size : NativeInt) : Pointer;
begin

 Inc(ReallocMemCount);

 Result := OldMM.ReallocMem(P, Size);

end;

function NewAllocMem(Size : NativeInt) : Pointer;
begin

 Inc(AllocMemCount);

 Result := OldMM.AllocMem(Size);

end;

initialization

 GetMemoryManager(OldMM);

 NewMM := OldMM;

 NewMM.GetMem     := @NewGetMem;
 NewMM.FreeMem    := @NewFreeMem;
 NewMM.ReallocMem := @NewReallocMem;
 NewMM.AllocMem   := @NewAllocMem;

 SetMemoryManager(NewMM);

finalization

 SetMemoryManager(OldMM);

end.

1. Подключаешь первым модулем в проект.
2. В потоке, в начале итерации, сохраняешь значения счётчиков: AllocMemCount, ReallocMemCount, FreeMemСount в локальные переменные.
3. В конце итерации считаешь разницу и получаешь количество обращений к менеджеру памяти.
4. ПРОФИТ.
1 авг 19, 15:13    [21939943]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Gator
Member

Откуда: Москва
Сообщений: 14672
Друзья, привет! Я, конечно, отстал в больничках, но мы не сгорели, не потонули.
И разъясните, пожалуйста, почему он 200% хочет на единственной тачке?
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?

__________
Даже если многомашинную систему соберёт, всё равно N*100% не получит.
Будут потери на связь, диски и другую лабуду-периферию. Хоть в азоте тачки утопи.
1 авг 19, 15:30    [21939966]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Ghost Writer
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?
запустить 8 экземпляров программы. не, ну а чо


ну в общем работает. если запустить два раза(на разные базы конечно) то загрузка проца удваивается
1 авг 19, 15:35    [21939973]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Gator
Друзья, привет! Я, конечно, отстал в больничках, но мы не сгорели, не потонули.
И разъясните, пожалуйста, почему он 200% хочет на единственной тачке?
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?

__________
Даже если многомашинную систему соберёт, всё равно N*100% не получит.
Будут потери на связь, диски и другую лабуду-периферию. Хоть в азоте тачки утопи.


сарказм же, нельзя быть таким простым
1 авг 19, 15:36    [21939976]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Gator
Member

Откуда: Москва
Сообщений: 14672
Pcrepair, нельзя продукты делать на 12% КПД
1 авг 19, 15:41    [21939983]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Kazantsev Alexey
1. Подключаешь первым модулем в проект.
2. В потоке, в начале итерации, сохраняешь значения счётчиков: AllocMemCount, ReallocMemCount, FreeMemСount в локальные переменные.
3. В конце итерации считаешь разницу и получаешь количество обращений к менеджеру памяти.
4. ПРОФИТ.


первым модулем в проект? в манагере проекта что не заметил никакой иерархии модулей

В потоке, в начале итерации
Итерация в программировании — в широком смысле — организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя (в отличие от рекурсии)

че не там итерации в потоке просто идет вызов функций и логика в конце

в конце итерации то нет

а вообще этот код не сломает компьютер?
1 авг 19, 15:45    [21939990]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Gator
Pcrepair, нельзя продукты делать на 12% КПД


ну да ну да. для того и тему вывесил, чтоб КПД завысить
1 авг 19, 15:47    [21939994]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
Pcrepair
вообще этот код не сломает компьютер?
+
с таким ником наверное должно быть не страшно
1 авг 19, 15:48    [21939997]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3624
Вот так пытаешься помочь человеку, а он идиот...
1 авг 19, 15:49    [21939999]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Kazantsev Alexey
Вот так пытаешься помочь человеку, а он идиот...


ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)
1 авг 19, 15:55    [21940007]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить