Вверх ↑
Этот топик читают: Гость
Ответов: 3
Рейтинг: 0
#1: 2016-08-18 11:56:12 ЛС | профиль | цитата
Хотелось бы сделать распределение ресурсов... да даже тестом работы программы на ядра процессора...есть ли примеры такой реализации? Возможно ли ?
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 16884
Рейтинг: 1239
#2: 2016-08-18 12:37:00 ЛС | профиль | цитата
https://www.google.co.il/?ion=1&espv=2#q=cpu+control+%D0%B4%D0%BB%D1%8F+8+%D1%8F%D0%B4%D0%B5%D1%80
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8888
Рейтинг: 823
#3: 2016-08-18 12:41:33 ЛС | профиль | цитата
hamelion, работать с несколькими потоками: code_37678.txt
100_75процентов.jpg
карма: 19

0
Ответов: 3
Рейтинг: 0
#4: 2016-08-18 20:42:36 ЛС | профиль | цитата
Tad, только средой хиасма реализация. Думаю как развести обработку звука одним ядром и графику другим...либо дать приоритеты с выбором ядра...
------------ Дoбавленo в 20.42:
Леонид, где задается жесткое соответствие поток1=ядро1 итд... (компилятором, средой?)
карма: 1

0
Ответов: 8888
Рейтинг: 823
#5: 2016-08-18 20:57:28 ЛС | профиль | цитата
hamelion, нигде, сама ОС лучше знает
(Случаем ваш ник не раздельно читается ham elion? Что-то знакомые задачи ставите.)
карма: 19

0
Ответов: 3
Рейтинг: 0
#6: 2016-08-19 00:15:01 ЛС | профиль | цитата
Леонид писал(а):
Что-то знакомые задачи ставите.)


)))

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

Рад видеть всех на форуме )

ого.. Dilma появился ?
карма: 1

0
Ответов: 963
Рейтинг: 12
#7: 2016-10-01 12:20:24 ЛС | профиль | цитата
Кстати, многие элементы Хайасм используют многоядерность в явном виде.
Посмотрите на код (Ctr-f) разных графических фильтров вроде сглаживания (BLUR) изображений.
procedure THIPBlur.Simple;
var rc:PThreadRec;
i,c:integer;
id:LongWord;
lpSystemInfo:_SYSTEM_INFO;
FEvents:array of cardinal;
lst:PList;
begin
bmp.PixelFormat := pf24bit;
src.PixelFormat := pf24bit;
if(bmp.Width > 256)and(bmp.Height > 256)then
begin
GetSystemInfo(lpSystemInfo);
c := lpSystemInfo.dwNumberOfProcessors;
//!! Выясняет количество доступных ядер/cpu
end
else c := 1;

lst := NewList;
SetLength(FEvents, c);
for i := 1 to c do
begin
new(rc);
rc.src := src;
rc.bmp := bmp;
rc.size := bmp.height div c;
rc.Start := (i-1)*rc.size;
rc.handle := CreateThread(0, 0, @Simple_proc, rc, 0, id);
//..и раскидывает задачу по потокам количество которых равно количеству ядер
FEvents[i-1] := rc.handle;
lst.Add(rc);
SetThreadPriority(rc.handle, THREAD_PRIORITY_HIGHEST);
end;
WaitForMultipleObjects(c, PWOHandleArray(@FEvents[0]), true, cardinal(-1));
for i := 0 to c-1 do
begin
CloseHandle(FEvents[i]);
dispose(PThreadRec(lst.Items[i]));
end;
lst.Free;
end;


Редактировалось 2 раз(а), последний 2016-10-01 12:29:00
карма: 0

0
Ответов: 4621
Рейтинг: 746
#8: 2016-10-03 10:51:58 ЛС | профиль | цитата
Кстати, про CreateThread. Такое использование параллельного потока - подводная мина. RTL Delphi остается однопоточной, как следствие, возможны глюки, например, при работе со строками (когда строка уничтожается, а в другом месте ещё используется). То же, возможно, при уничтожении массивов и объектов.
карма: 26

0
Ответов: 9906
Рейтинг: 351
#9: 2016-10-05 05:09:39 ЛС | профиль | цитата
Netspirit писал(а):
RTL Delphi остается однопоточной, как следствие, возможны глюки

Бинго

Вообще-то, это означает: Если ты отвечаешь за базар - не используй потоки!
Не больше, и не меньше.
А если уж -- нет, то тебе можно все. Правда, кому ты после этого нужен будешь ...

Редактировалось 3 раз(а), последний 2016-10-05 05:11:20
карма: 9

0
Ответов: 4621
Рейтинг: 746
#10: 2016-10-05 11:09:40 ЛС | профиль | цитата
Galkov писал(а):
Если ты отвечаешь за базар - не используй потоки!

Вообще-то, если ты "отвечаешь за базар", то используй потоки правильно. Например, в данном случае было бы достаточно

function Simple_proc(l:pointer):Integer; {$ifdef F_P}stdcall;{$endif}

...

rc.handle := {$ifdef F_P}CreateThread{$else}BeginThread{$endif}rc.handle(0, 0, @Simple_proc, rc, 0, id);
А если бы кто-то не кастрировал штатный FPC, то и без {$ifdef} обошлось бы.

Но, по правде, не факт, что во время написания компонента (да и сейчас) кто-то знал об этих нюансах. Я, например, это выяснил только после многочасовой отладки TCP компонентов, которые используют много потоков (тем более, что глюки практически не проявляются на однопроцессорных компьютерах). Кроме того, в KOL же есть свой класс потока - почему его использования избежали здесь? Предполагаю - потому что глюки (как минимум, в FPC).

Редактировалось 4 раз(а), последний 2016-10-05 11:14:58
карма: 26

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)