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

Откуда: Москва
Сообщений: 10424
Pcrepair
ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)
Иногда для педагогического эффекта требуются розги, причем не виртуальные.
1 авг 19, 16:01    [21940018]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Dimitry Sibiryakov
Member

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

Pcrepair
нет плохих учеников, но есть плохие учителя(Ц)

Да, да, можешь и дальше самоутешаться этой инфантильной глупостью. Или таки включить мозг
и начать изучать как работает компьютер и программы.

Posted via ActualForum NNTP Server 1.5

1 авг 19, 16:01    [21940020]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
ёёёёё
Member

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


ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)

+1 000 000! Отличный девиз для неудачника.
1 авг 19, 16:37    [21940050]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
NetObserver
Member

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

ну в общем работает. если запустить два раза(на разные базы конечно) то загрузка проца удваивается

Вот! Это показатель того, что программа написана с ошибкой в распараллеливании
потоков. Где-то есть бутылочное горлышко и потоки работают последовательно.
Проверяйте синхронизацию с основным потоком, возможно где-то неявная синхронизация, например выделение памяти или какой-то компонент.
1 авг 19, 19:53    [21940155]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)

интересный вы человек, вам предлагают варианты - вы не делаете ничего, но уже на 3 страницу перешли )
1 авг 19, 19:57    [21940157]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
wolverin
Pcrepair
ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)

интересный вы человек, вам предлагают варианты - вы не делаете ничего, но уже на 3 страницу перешли )


если удалить повторы-цитаты и просто треп не по делу останется не более одной страницы

но как говориться в таких случаях "нет у меня для вас других форумов"

Вот! Это показатель того, что программа написана с ошибкой в распараллеливании


программа очень простая:
- создается поток и ему передается несколько параметров(строки и числа)
- поток через трубу читает файл с ССД диска и определяет его статус
- копирует в другой каталог
- удаляет файл в первом каталоге
число потоков от 2 до 100, загрузка проца одинакова, меняется только размер занимаемой памяти
прога уже обработала несколько сот тысяч файлов без единого сбоя (исключение)
ага!
1 авг 19, 20:40    [21940184]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Pcrepair
- создается поток и ему передается несколько параметров(строки и числа)

Когда вы перестанете мыслить низкоуровневыми примитивами типа потока, и начнете думать более высокоуровневыми такими как ITask.
Ведь и код проще и поддержка проще.
1 авг 19, 21:14    [21940199]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Ну вот пример
procedure TForm1.Test;
const
  Src = 'e:\DelphiTest\A';
  Dst = 'e:\DelphiTest\B\';
begin
  var Closure :=
    procedure (const aFileName: string)
    begin
      TTask.Run(
        procedure
        begin
          var FileContent := TFile.ReadAllBytes(aFileName);
          TFile.WriteAllBytes(Dst + TPath.GetFileName(aFileName), FileContent);
          TFile.Delete(aFileName);
        end
      );
    end;

  var Files := TDirectory.GetFiles(Src);
  for var FileName in Files do
    Closure(FileName);
end;


Я тут совершенно не понимаю, почему процессор должен быть загружен.
Положил в папку 35 файлов по 25 мб.
Ну перенеслись они за какое-то время... процессор тут при чем?
1 авг 19, 21:54    [21940212]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
А вот если добавить
  var Closure :=
    procedure (const aFileName: string)
    begin
      TTask.Run(
        procedure
        begin
          var FileContent := TFile.ReadAllBytes(aFileName);
          // добавим чтобы нагрузить процессор
          for var ByteContent1 in FileContent do
            for var ByteContent2 in FileContent do
              if Random(10) < 5 then
                Break;

          TFile.WriteAllBytes(Dst + TPath.GetFileName(aFileName), FileContent);
          TFile.Delete(aFileName);
        end
      );
    end;


То и получим 100% на всех ядрах.
1 авг 19, 22:01    [21940216]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
автор
То и получим 100% на всех ядрах.
X-Cite

это все познавательно, занимательно и очень интересно(работа с диском). но не имеет никакого отношения к загрузке проца в моем случае
но все равно спасибо
1 авг 19, 22:38    [21940225]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Pcrepair
автор
То и получим 100% на всех ядрах.
X-Cite

это все познавательно, занимательно и очень интересно(работа с диском). но не имеет никакого отношения к загрузке проца в моем случае
но все равно спасибо


автор
1. Комп(i7 8 вирт. ядер; 8гб ОЗУ; ВЫНь7 х64; SSD для хранения данных; ХЕ10.2.3)


8 одновременных тасок с внутренними циклами загрузят все ядра на 100%.

Уберите вашу работу с потоками на таски и увидите результат.. Если конечно нет каких-то внутренних синхронизаций между ними и пока одна работает другие 7 ждут.
1 авг 19, 22:55    [21940232]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
если удалить повторы-цитаты и просто треп не по делу останется не более одной страницы
но как говориться в таких случаях "нет у меня для вас других форумов"

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

Откуда:
Сообщений: 702
8 одновременных тасок с внутренними циклами загрузят все ядра на 100%

все таки задача не в том чтобы ПРОСТО загрузить проц на 100% а загрузить его на 100% задачами обработки данных. или имеется в виду
procedure Test;
begin
  var Closure :=
    procedure (const aFileName: string)
    begin
      TTask.Run(
        procedure
        begin
          //do something usefull
        end
      );
    end;
end;


типа заменить поток на задание?
2 авг 19, 07:25    [21940304]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
ziv-2014
Member

Откуда:
Сообщений: 376
X-Cite
Pcrepair
пропущено...
X-Cite

это все познавательно, занимательно и очень интересно(работа с диском). но не имеет никакого отношения к загрузке проца в моем случае
но все равно спасибо


автор
1. Комп(i7 8 вирт. ядер; 8гб ОЗУ; ВЫНь7 х64; SSD для хранения данных; ХЕ10.2.3)


8 одновременных тасок с внутренними циклами загрузят все ядра на 100%.

Уберите вашу работу с потоками на таски и увидите результат.. Если конечно нет каких-то внутренних синхронизаций между ними и пока одна работает другие 7 ждут.

А 8 одновременно потоков с внутренними циклами не загрузят все ядра на 100%? ITask - это интерфейс, обертка над TThread и пулом потоков.
2 авг 19, 09:44    [21940382]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
ziv-2014

Вызвать асинхронно метод который выполнчет работу проще для понимания, чем копаться в наследниках tthread.

Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...
2 авг 19, 10:11    [21940418]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
X-Cite
Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...

т.е. чтение из одной области памяти разными потоками вызывает блокировки?
2 авг 19, 10:15    [21940424]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
wolverin
X-Cite
Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...

т.е. чтение из одной области памяти разными потоками вызывает блокировки?

Нет. С чего вдруг?
2 авг 19, 10:21    [21940427]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
ziv-2014
Member

Откуда:
Сообщений: 376
X-Cite
ziv-2014

Вызвать асинхронно метод который выполнчет работу проще для понимания, чем копаться в наследниках tthread.

Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...

Я так полагаю вы тролите?
2 авг 19, 10:25    [21940431]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
X-Cite
Нет. С чего вдруг?

говорят тут про блокировки все, понять не могу где они )
2 авг 19, 10:55    [21940458]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Я вам привел минимальный код который выполняет мнимую полезную работу согласно вашим пунктам и нагружает соответственно все ядра.
Читает файл. Что-то делает с ним. Записывает его в другое место и удаляет.
У меня hdd. Все работает в параллели и все ядра загружены.
2 авг 19, 11:08    [21940472]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
Кода, я так понимаю, мы так и не увидим
4 авг 19, 14:32    [21941551]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
cptngrb
Member

Откуда:
Сообщений: 346
если автор уверен, что в его коде нет блокировок, то ...
был у меня случай на Windows Server какой-то, режим питания стоял по умолчанию и проц никак не хотел "грузиться", но поменяли план электропотребления и чудо произошло
6 авг 19, 12:24    [21942801]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28078
Pcrepair
"программа параллельно не работает, и грузит только ОДНО ядро" вот тут не понял, распределением нагрузки ОС же заведует и при много потоках ОС должна все ресурсы отдать. и что такое "программа параллельно не работает"

12% загрузки 8 ядерного процессора это 1/8 от 100% загрузки 8ядерного процессора.
Таким образом, реально загружено только 1 ядро из 8. То, что вы видите в диспетчере задач - ОС просто перекитывает ваш процесс с одного ядра на другое. И вы видите типа "пилу" на нескольких ядрах.
Если бы у вас хоть еще 1 ядро было дополнительно загружено, вы бы увидели общую загрузку процессора между 13 и 25%.

Если у вас в программе n потоков, но используется 1 ядро, это значит, что потоки параллельно не работают - где-то они затыкаются на монопольной синхронизации между потоками.

Для дельфи есть несколько примеров работы с потоками, которые реально распараллеливаются по ядрам.
6 авг 19, 13:08    [21942852]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
b0rk
Member

Откуда: Харьков
Сообщений: 584
Pcrepair
программа очень простая:
- создается поток и ему передается несколько параметров(строки и числа)
- поток через трубу читает файл с ССД диска и определяет его статус
- копирует в другой каталог
- удаляет файл в первом каталоге
число потоков от 2 до 100, загрузка проца одинакова, меняется только размер занимаемой памяти
прога уже обработала несколько сот тысяч файлов без единого сбоя (исключение)
ага!

давно известно, что обращение к диску (хоть HDD, хоть SDD) - это самая медленная операция. если вы упираетесь в скорость чтения/записи диска, то хоть в 100500 потоков запустите, все равно быстрее не станет. и, конечно, ожидать загрузки всех ядер процессора на 100% при дисковых операциях очень наивно.
6 авг 19, 13:50    [21942929]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
Как показывает практика, загрузить дисковую систему на 100% сложно, какие-то дополнительные телодвижения есть всегда, и они параллелятся вполне. Нужно подбирать очень особенную задачу наверно, чтобы от распараллеливания выигрыша вообще не было. Другое дело, что ожидать 100% загрузки ядер тоже не всегда стоит.
6 авг 19, 17:02    [21943119]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Delphi Ответить