Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#16: 2020-10-09 14:18:46 ЛС | профиль | цитата
Многопоточность и многоядерность-это разные термины.
Количество ядер и количество потоков не связаны между собой.
Никак.

Редактировалось 1 раз(а), последний 2020-10-09 14:21:19
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4628
Рейтинг: 749
#17: 2020-10-09 14:22:44 ЛС | профиль | цитата
Gik писал(а):
В программе может не быть параллельности, если все ядра используют одну память?
Не очень понял. Можно считать что на уровне железа ядра процессора используют память параллельно.
Gik писал(а):
показывается с помощью прогрессбара, поэтому тоже может не быть параллельности?
Да.

Tad писал(а):
Количество ядер и количество потоков не связаны между собой.
Зато параллельность исполнения кода связана с этим. Если много ядер и один поток - код выполняется последовательно. Если 1 ядро и много потоков - код выполняется последовательно (технология HT что-то там в этом случае улучшает, но не так, как при наличии физических ядер).

Редактировалось 2 раз(а), последний 2020-10-12 11:50:31
карма: 26

0
Ответов: 60
Рейтинг: 0
#18: 2020-10-12 11:44:03 ЛС | профиль | цитата
Подскажите, кто-нибудь использовал MT потоки данных для параллельного выполнения потоков?
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#19: 2020-10-12 12:47:54 ЛС | профиль | цитата
Gik, а так
2 ядра

Редактировалось 1 раз(а), последний 2020-10-12 13:09:08
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1gik.zip [1.4KB] [380]
Ответов: 60
Рейтинг: 0
#20: 2020-10-12 15:11:27 ЛС | профиль | цитата
Спасибо. У меня только 1 ядро загружается.
А вот пример программы, где каждый поток загружает одно ядро, если применять массивы.

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=971
Height=384
Caption="Wait for Multiple Objects"
Position=1
link(onCreate,13804482:doEvent1,[])
}
Add(Button,3342741,280,112)
{
Left=70
Top=15
Width=115
Caption="Start"
Data=String(ABCDEF)
link(onClick,1818191:doEvent1,[])
}
Add(Thread,9400599,441,112)
{
Delay=0
FastStop=0
link(onExec,9245367:doFor,[(637,118)(637,181)])
}
Add(Hub,1818191,329,112)
{
OutCount=4
link(onEvent1,9400599:doStart,[])
link(onEvent2,2883773:doStart,[(392,125)(392,321)])
link(onEvent3,3610323:doStart,[(378,132)(378,496)])
link(onEvent4,7322388:doStart,[(427,139)(427,706)])
}
Add(Thread,2883773,441,315)
{
Delay=0
FastStop=0
link(onExec,15157217:doFor,[(623,321)(623,363)])
}
Add(Thread,3610323,448,490)
{
Delay=0
FastStop=0
link(onExec,6553458:doFor,[(616,496)(616,524)])
}
Add(LineBreakEx,12358704,917,259)
{
Caption="H1"
Type=3
link(_Data,5953648:ObjHandle,[])
}
Add(LineBreakEx,11815744,903,427)
{
Caption="H2"
Type=3
link(_Data,9593067:ObjHandle,[])
}
Add(LineBreakEx,16371797,896,602)
{
Caption="H3"
Type=3
link(_Data,13923820:ObjHandle,[])
}
Add(LineBreakEx,4797077,588,630)
{
Caption="H1"
Type=2
}
Add(LineBreakEx,12999161,595,651)
{
Caption="H2"
Type=2
}
Add(LineBreakEx,777119,602,672)
{
Caption="H3"
Type=2
}
Add(WaitMultiple,7791455,588,700)
{
Count=3
link(onWait,1586077:doEnum,[])
link(Handle1,4797077:getVar,[])
link(Handle2,12999161:getVar,[])
link(Handle3,777119:getVar,[])
}
Add(Events,9593067,903,385)
{
Name=""
ManualReset=1
}
Add(Events,5953648,917,217)
{
Name=""
ManualReset=1
}
Add(Events,13923820,896,560)
{
Name=""
ManualReset=1
}
Add(LineBreak,12921458,875,217)
{
Caption="cr1"
link(Out,5953648:doCreate,[])
Primary=[3562615,-721,-98]
}
Add(LineBreak,4158070,854,385)
{
Caption="cr2"
link(Out,9593067:doCreate,[])
Primary=[11905685,-728,-259]
}
Add(LineBreak,10898410,854,560)
{
Caption="cr3"
link(Out,13923820:doCreate,[])
Primary=[13581513,-700,-427]
}
Add(Hub,13804482,91,119)
{
OutCount=3
link(onEvent1,3562615:In,[])
link(onEvent2,11905685:In,[])
link(onEvent3,13581513:In,[])
}
Add(For,9245367,770,175)
{
IncludeEnd=1
link(onEvent,12256453:doOperation,[])
link(onStop,5953648:doSet,[(860,188)(860,230)])
link(End,5403546:Var2,[])
}
Add(Math,12256453,994,175)
{
link(onResult,976171:doValue,[(1123,181)(1123,167)])
link(Op1,9245367:Position,[(1000,163)(888,163)(888,219)(776,219)])
link(Op2,14401824:Var2,[(1007,163)(1095,163)(1095,243)(1182,243)])
}
Add(Memory,976171,1176,161)
{
Default=Integer(0)
Point(Data)
link(onData,16336590:doAdd,[(1290,167)(1290,181)])
}
Add(Edit,8564700,777,28)
{
Left=15
Top=15
}
Add(For,15157217,742,357)
{
IncludeEnd=1
link(onEvent,10619049:doOperation,[])
link(onStop,9593067:doSet,[(838,370)(838,398)])
link(End,151197:Var2,[])
}
Add(Math,10619049,966,357)
{
link(onResult,12718577:doValue,[(1095,363)(1095,349)])
link(Op1,15157217:Position,[(972,345)(860,345)(860,401)(748,401)])
link(Op2,1542789:Var2,[(979,345)(1067,345)(1067,434)(1154,434)])
}
Add(Memory,12718577,1148,343)
{
Default=Integer(0)
Point(Data)
link(onData,8720180:doAdd,[(1227,349)(1227,363)])
}
Add(GetDataEx,5403546,777,140)
{
link(Data,8564700:Text,[])
}
Add(For,6553458,721,518)
{
IncludeEnd=1
link(onEvent,16677086:doOperation,[])
link(onStop,13923820:doSet,[(825,531)(825,573)])
link(End,151197:Var1,[(734,306)])
}
Add(Math,16677086,945,518)
{
link(onResult,13916257:doValue,[(1074,524)(1074,510)])
link(Op1,6553458:Position,[(951,506)(839,506)(839,562)(727,562)])
link(Op2,16354893:Var2,[(958,506)(1046,506)(1046,588)(1133,588)])
}
Add(Memory,13916257,1127,504)
{
Default=Integer(0)
Point(Data)
link(onData,1568353:doAdd,[])
}
Add(GetDataEx,151197,749,301)
{
link(Data,5403546:Var1,[(755,145)])
}
Add(Memo,13345728,1057,700)
{
Left=30
Top=45
Width=220
Height=275
ScrollBars=3
}
Add(ArrayEnum,1586077,686,700)
{
link(onItem,12948517:doWork2,[])
link(onEndEnum,3695970:doEnum,[(737,713)(737,734)])
link(Array,7086870:Var2,[(692,408)(692,408)(1427,408)])
}
Add(RealArray,14051834,1421,70)
{
RealArray=[]
}
Add(ArrayRW,16336590,1372,161)
{
link(Array,7086870:Var1,[(1378,131)])
link(Value,14401824:Var3,[(1392,149)(1288,149)(1288,236)])
}
Add(GetDataEx,7086870,1421,126)
{
link(Data,14051834:Array,[])
}
Add(ArrayRW,8720180,1274,343)
{
link(Array,5705375:Var1,[(1280,313)])
link(Value,1542789:Var3,[(1294,331)(1226,331)(1226,397)])
}
Add(GetDataEx,14401824,1176,231)
{
link(Data,976171:Value,[])
}
Add(GetDataEx,1542789,1148,392)
{
link(Data,12718577:Value,[])
}
Add(ArrayRW,1568353,1253,490)
{
link(Array,4005094:Var1,[(1259,464)])
link(Value,16354893:Var3,[(1273,478)(1205,478)(1205,565)])
}
Add(GetDataEx,16354893,1127,560)
{
link(Data,13916257:Value,[])
}
Add(Thread,7322388,511,700)
{
Delay=0
FastStop=0
link(onExec,7791455:doWait,[])
}
Add(RealArray,6063749,1330,252)
{
RealArray=[]
}
Add(RealArray,13261206,1323,413)
{
RealArray=[]
}
Add(ArrayEnum,3695970,756,728)
{
link(onItem,12948517:doWork3,[(823,734)])
link(onEndEnum,4166759:doEnum,[(821,741)(821,755)])
link(Array,5705375:Var2,[(762,522)(1322,522)])
}
Add(GetDataEx,5705375,1316,308)
{
Angle=1
link(Data,6063749:Array,[(1336,313)])
}
Add(HubEx,12948517,819,700)
{
link(onEvent,9517924:doWork2,[])
}
Add(ArrayEnum,4166759,854,749)
{
link(onItem,9517924:doWork3,[(914,755)])
link(Array,4005094:Var2,[(860,609)(1308,609)])
}
Add(GetDataEx,4005094,1302,459)
{
Angle=1
link(Data,13261206:Array,[(1329,464)])
}
Add(HubEx,9517924,910,700)
{
link(onEvent,13345728:doAdd,[])
}

карма: 1

0
Ответов: 4628
Рейтинг: 749
#21: 2020-10-12 15:39:47 ЛС | профиль | цитата
Выглядит нормально. Сколько у тебя времени выполняется обработка?
карма: 26

0
Ответов: 60
Рейтинг: 0
#22: 2020-10-12 16:09:23 ЛС | профиль | цитата
Чем больше значение цикла введешь в поле ввода, тем дольше. Разное время. Не смотрел сколько времени.

Редактировалось 1 раз(а), последний 2020-10-12 16:12:26
карма: 1

0
Ответов: 4628
Рейтинг: 749
#23: 2020-10-12 16:43:17 ЛС | профиль | цитата
Сделай чтобы секунд 10 выполнялась.
карма: 26

0
Ответов: 60
Рейтинг: 0
#24: 2020-10-12 16:46:11 ЛС | профиль | цитата
Программа с несколькими потоками

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=971
Height=384
Caption="Wait for Multiple Objects"
Position=1
link(onCreate,13804482:doEvent1,[])
}
Add(Button,3342741,280,105)
{
Left=70
Top=15
Width=115
Caption="Start"
Data=String(ABCDEF)
link(onClick,1818191:doEvent1,[])
}
Add(Thread,9400599,441,112)
{
Delay=0
FastStop=0
link(onExec,9245367:doFor,[(637,118)(637,181)])
}
Add(Hub,1818191,329,105)
{
OutCount=5
link(onEvent1,5114947:doStart,[(375,111)(375,818)])
link(onEvent2,9400599:doStart,[])
link(onEvent3,2883773:doStart,[(392,125)(392,321)])
link(onEvent4,3610323:doStart,[(395,132)(395,496)])
link(onEvent5,7322388:doStart,[(427,139)(427,706)])
}
Add(Thread,2883773,441,315)
{
Delay=0
FastStop=0
link(onExec,15157217:doFor,[(623,321)(623,363)])
}
Add(Thread,3610323,448,490)
{
Delay=0
FastStop=0
link(onExec,6553458:doFor,[(616,496)(616,524)])
}
Add(LineBreakEx,12358704,917,259)
{
Caption="H1"
Type=3
link(_Data,5953648:ObjHandle,[])
}
Add(LineBreakEx,11815744,903,427)
{
Caption="H2"
Type=3
link(_Data,9593067:ObjHandle,[])
}
Add(LineBreakEx,16371797,896,602)
{
Caption="H3"
Type=3
link(_Data,13923820:ObjHandle,[])
}
Add(LineBreakEx,4797077,588,630)
{
Caption="H1"
Type=2
}
Add(LineBreakEx,12999161,595,651)
{
Caption="H2"
Type=2
}
Add(LineBreakEx,777119,602,672)
{
Caption="H3"
Type=2
}
Add(WaitMultiple,7791455,588,700)
{
Count=3
link(onWait,16506042:doEvent1,[(628,706)(628,699)])
link(Handle1,4797077:getVar,[])
link(Handle2,12999161:getVar,[])
link(Handle3,777119:getVar,[])
}
Add(Events,9593067,903,385)
{
Name=""
ManualReset=1
}
Add(Events,5953648,917,217)
{
Name=""
ManualReset=1
}
Add(Events,13923820,896,560)
{
Name=""
ManualReset=1
}
Add(LineBreak,1438257,875,217)
{
Caption="cr1"
link(Out,5953648:doCreate,[])
Primary=[3562615,-721,-98]
}
Add(LineBreak,5260532,854,385)
{
Caption="cr2"
link(Out,9593067:doCreate,[])
Primary=[11905685,-728,-259]
}
Add(LineBreak,1839924,854,560)
{
Caption="cr3"
link(Out,13923820:doCreate,[])
Primary=[13581513,-700,-427]
}
Add(Hub,13804482,91,119)
{
OutCount=3
link(onEvent1,3562615:In,[])
link(onEvent2,11905685:In,[])
link(onEvent3,13581513:In,[])
}
Add(For,9245367,770,175)
{
IncludeEnd=1
link(onEvent,12256453:doOperation,[])
link(onStop,5953648:doSet,[(860,188)(860,230)])
link(End,5403546:Var2,[])
}
Add(Math,12256453,994,175)
{
link(onResult,976171:doValue,[(1123,181)(1123,167)])
link(Op1,9245367:Position,[(1000,163)(888,163)(888,219)(776,219)])
link(Op2,14401824:Var2,[(1007,163)(1095,163)(1095,243)(1182,243)])
}
Add(Memory,976171,1176,161)
{
Default=Integer(0)
Point(Data)
link(onData,16336590:doAdd,[(1290,167)(1290,181)])
}
Add(Edit,8564700,777,28)
{
Left=15
Top=15
}
Add(For,15157217,742,357)
{
IncludeEnd=1
link(onEvent,10619049:doOperation,[])
link(onStop,9593067:doSet,[(838,370)(838,398)])
link(End,151197:Var2,[])
}
Add(Math,10619049,966,357)
{
link(onResult,12718577:doValue,[(1095,363)(1095,349)])
link(Op1,15157217:Position,[(972,345)(860,345)(860,401)(748,401)])
link(Op2,1542789:Var2,[(979,345)(1067,345)(1067,434)(1154,434)])
}
Add(Memory,12718577,1148,343)
{
Default=Integer(0)
Point(Data)
link(onData,8720180:doAdd,[(1227,349)(1227,363)])
}
Add(GetDataEx,5403546,777,140)
{
link(Data,8564700:Text,[])
}
Add(For,6553458,721,518)
{
IncludeEnd=1
link(onEvent,16677086:doOperation,[])
link(onStop,13923820:doSet,[(825,531)(825,573)])
link(End,151197:Var1,[(734,306)])
}
Add(Math,16677086,945,518)
{
link(onResult,13916257:doValue,[(1074,524)(1074,510)])
link(Op1,6553458:Position,[(951,506)(839,506)(839,562)(727,562)])
link(Op2,16354893:Var2,[(958,506)(1046,506)(1046,588)(1133,588)])
}
Add(Memory,13916257,1127,504)
{
Default=Integer(0)
Point(Data)
link(onData,1568353:doAdd,[])
}
Add(GetDataEx,151197,749,301)
{
link(Data,5403546:Var1,[(755,145)])
}
Add(Memo,13345728,1057,700)
{
Left=30
Top=45
Width=220
Height=275
ScrollBars=3
}
Add(ArrayEnum,1586077,686,700)
{
link(onItem,12948517:doWork2,[])
link(onEndEnum,3695970:doEnum,[(737,713)(737,734)])
link(Array,7086870:Var2,[(692,408)(692,408)(1427,408)])
}
Add(RealArray,14051834,1421,70)
{
RealArray=[]
}
Add(ArrayRW,16336590,1372,161)
{
link(Array,7086870:Var1,[(1378,131)])
link(Value,14401824:Var3,[(1392,149)(1288,149)(1288,236)])
}
Add(GetDataEx,7086870,1421,126)
{
link(Data,14051834:Array,[])
}
Add(ArrayRW,8720180,1274,343)
{
link(Array,5705375:Var1,[(1280,313)])
link(Value,1542789:Var3,[(1294,331)(1226,331)(1226,397)])
}
Add(GetDataEx,14401824,1176,231)
{
link(Data,976171:Value,[])
}
Add(GetDataEx,1542789,1148,392)
{
link(Data,12718577:Value,[])
}
Add(ArrayRW,1568353,1253,490)
{
link(Array,4005094:Var1,[(1259,464)])
link(Value,16354893:Var3,[(1273,478)(1205,478)(1205,565)])
}
Add(GetDataEx,16354893,1127,560)
{
link(Data,13916257:Value,[])
}
Add(Thread,7322388,511,700)
{
Delay=0
FastStop=0
link(onExec,7791455:doWait,[])
}
Add(RealArray,6063749,1330,252)
{
RealArray=[]
}
Add(RealArray,13261206,1323,413)
{
RealArray=[]
}
Add(ArrayEnum,3695970,756,728)
{
link(onItem,12948517:doWork3,[(823,734)])
link(onEndEnum,4166759:doEnum,[(821,741)(821,755)])
link(Array,5705375:Var2,[(762,522)(1322,522)])
}
Add(GetDataEx,5705375,1316,308)
{
Angle=1
link(Data,6063749:Array,[(1336,313)])
}
Add(HubEx,12948517,819,700)
{
link(onEvent,9517924:doWork2,[])
}
Add(ArrayEnum,4166759,854,749)
{
link(onItem,9517924:doWork3,[(914,755)])
link(Array,4005094:Var2,[(860,609)(1308,609)])
}
Add(GetDataEx,4005094,1302,459)
{
Angle=1
link(Data,13261206:Array,[(1329,464)])
}
Add(HubEx,9517924,910,700)
{
link(onEvent,13345728:doAdd,[])
}
Add(TimeCounter,5114947,1218,812)
{
link(onStop,10070495:doText,[])
}
Add(Label,10070495,1302,819)
{
Left=205
Top=20
}
Add(Hub,16506042,637,693)
{
link(onEvent1,5114947:doStop,[(935,699)(935,825)])
link(onEvent2,1586077:doEnum,[])
}

Программа с одним потоком

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=971
Height=384
Caption="Wait for Multiple Objects"
Position=1
}
Add(Button,3342741,280,105)
{
Left=70
Top=15
Width=115
Caption="Start"
Data=String(ABCDEF)
link(onClick,1818191:doEvent1,[])
}
Add(Thread,9400599,441,112)
{
Delay=0
FastStop=0
link(onExec,9245367:doFor,[(637,118)(637,181)])
}
Add(Hub,1818191,329,105)
{
link(onEvent1,5114947:doStart,[(375,111)(375,818)])
link(onEvent2,9400599:doStart,[])
}
Add(For,9245367,770,175)
{
IncludeEnd=1
link(onEvent,12256453:doOperation,[])
link(onStop,15157217:doFor,[(814,188)(814,276)(730,276)(730,363)])
link(End,5403546:Var2,[])
}
Add(Math,12256453,994,175)
{
link(onResult,976171:doValue,[(1123,181)(1123,167)])
link(Op1,9245367:Position,[(1000,163)(888,163)(888,219)(776,219)])
link(Op2,14401824:Var2,[(1007,163)(1095,163)(1095,243)(1182,243)])
}
Add(Memory,976171,1176,161)
{
Default=Integer(0)
Point(Data)
link(onData,16336590:doAdd,[(1290,167)(1290,181)])
}
Add(Edit,8564700,777,28)
{
Left=15
Top=15
}
Add(For,15157217,742,357)
{
IncludeEnd=1
link(onEvent,10619049:doOperation,[])
link(onStop,6553458:doFor,[(786,370)(786,447)(709,447)(709,524)])
link(End,151197:Var2,[])
}
Add(Math,10619049,966,357)
{
link(onResult,12718577:doValue,[(1095,363)(1095,349)])
link(Op1,15157217:Position,[(972,345)(860,345)(860,401)(748,401)])
link(Op2,1542789:Var2,[(979,345)(1067,345)(1067,434)(1154,434)])
}
Add(Memory,12718577,1148,343)
{
Default=Integer(0)
Point(Data)
link(onData,8720180:doAdd,[(1227,349)(1227,363)])
}
Add(GetDataEx,5403546,777,140)
{
link(Data,8564700:Text,[])
}
Add(For,6553458,721,518)
{
IncludeEnd=1
link(onEvent,16677086:doOperation,[])
link(onStop,16506042:doEvent1,[(765,531)(765,615)(583,615)(583,699)])
link(End,151197:Var1,[(734,306)])
}
Add(Math,16677086,945,518)
{
link(onResult,13916257:doValue,[(1074,524)(1074,510)])
link(Op1,6553458:Position,[(951,506)(839,506)(839,562)(727,562)])
link(Op2,16354893:Var2,[(958,506)(1046,506)(1046,588)(1133,588)])
}
Add(Memory,13916257,1127,504)
{
Default=Integer(0)
Point(Data)
link(onData,1568353:doAdd,[])
}
Add(GetDataEx,151197,749,301)
{
link(Data,5403546:Var1,[(755,145)])
}
Add(Memo,13345728,1057,700)
{
Left=30
Top=45
Width=220
Height=275
ScrollBars=3
}
Add(ArrayEnum,1586077,686,700)
{
link(onItem,12948517:doWork2,[])
link(onEndEnum,3695970:doEnum,[(737,713)(737,734)])
link(Array,7086870:Var2,[(692,408)(692,408)(1427,408)])
}
Add(RealArray,14051834,1421,70)
{
RealArray=[]
}
Add(ArrayRW,16336590,1372,161)
{
link(Array,7086870:Var1,[(1378,131)])
link(Value,14401824:Var3,[(1392,149)(1288,149)(1288,236)])
}
Add(GetDataEx,7086870,1421,126)
{
link(Data,14051834:Array,[])
}
Add(ArrayRW,8720180,1274,343)
{
link(Array,5705375:Var1,[(1280,313)])
link(Value,1542789:Var3,[(1294,331)(1226,331)(1226,397)])
}
Add(GetDataEx,14401824,1176,231)
{
link(Data,976171:Value,[])
}
Add(GetDataEx,1542789,1148,392)
{
link(Data,12718577:Value,[])
}
Add(ArrayRW,1568353,1253,490)
{
link(Array,4005094:Var1,[(1259,464)])
link(Value,16354893:Var3,[(1273,478)(1205,478)(1205,565)])
}
Add(GetDataEx,16354893,1127,560)
{
link(Data,13916257:Value,[])
}
Add(RealArray,6063749,1330,252)
{
RealArray=[]
}
Add(RealArray,13261206,1323,413)
{
RealArray=[]
}
Add(ArrayEnum,3695970,756,728)
{
link(onItem,12948517:doWork3,[(823,734)])
link(onEndEnum,4166759:doEnum,[(821,741)(821,755)])
link(Array,5705375:Var2,[(762,522)(1322,522)])
}
Add(GetDataEx,5705375,1316,308)
{
Angle=1
link(Data,6063749:Array,[(1336,313)])
}
Add(HubEx,12948517,819,700)
{
link(onEvent,9517924:doWork2,[])
}
Add(ArrayEnum,4166759,854,749)
{
link(onItem,9517924:doWork3,[(914,755)])
link(Array,4005094:Var2,[(860,609)(1308,609)])
}
Add(GetDataEx,4005094,1302,459)
{
Angle=1
link(Data,13261206:Array,[(1329,464)])
}
Add(HubEx,9517924,910,700)
{
link(onEvent,13345728:doAdd,[])
}
Add(TimeCounter,5114947,1218,812)
{
link(onStop,10070495:doText,[])
}
Add(Label,10070495,1302,819)
{
Left=205
Top=20
}
Add(Hub,16506042,595,693)
{
link(onEvent1,5114947:doStop,[(935,699)(935,825)])
link(onEvent2,1586077:doEnum,[])
}
С одним потоком дольше выполняется
карма: 1

0
Ответов: 4628
Рейтинг: 749
#25: 2020-10-12 17:04:19 ЛС | профиль | цитата
У тебя - сколько именно времени выполняется многопоточная?
И да, дольше в одном потоке значит что многопоточность работает.

Редактировалось 1 раз(а), последний 2020-10-12 17:05:19
карма: 26

0
Ответов: 60
Рейтинг: 0
#26: 2020-10-12 17:30:26 ЛС | профиль | цитата
Если ввести цикл 1000000-многопоточная 843 или 859 мс, однопоточная - 2171мс. С матрицами не хочет на нескольких процессорах выполнять многопоточность.

Редактировалось 1 раз(а), последний 2020-10-12 17:33:42
карма: 1

0
Ответов: 4628
Рейтинг: 749
#27: 2020-10-12 17:33:29 ЛС | профиль | цитата
Этого времени мало чтобы делать выводы о исполнении на одном ядре. Сделаешь чтобы многопоточная схема выполнялась 10 секунд - увидишь распределение по ядрах.
карма: 26

0
Ответов: 60
Рейтинг: 0
#28: 2020-10-12 19:30:29 ЛС | профиль | цитата
Да, если ввести большой цикл, с матрицами тоже распределение по ядрам работает.
карма: 1

0
Ответов: 60
Рейтинг: 0
#29: 2020-10-16 15:16:22 ЛС | профиль | цитата
Какая схема правильная?

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=430
}
Add(Math,10123011,693,350)
{
OpType=7
Op2=2
link(onResult,3541718:doEvent1,[])
link(Op1,14590559:Var3,[(699,236)])
}
Add(GetDataEx,14582755,770,389)
{
Angle=3
link(Data,10123011:Result,[(699,394)])
}
Add(Button,13200831,119,315)
{
Left=15
Top=55
Caption="Расчет"
link(onClick,2452385:doEvent1,[])
}
Add(Edit,8564700,532,49)
{
Left=15
Top=15
}
Add(Math,12271454,1358,357)
{
link(onResult,5195423:doEvent1,[])
link(Op1,2943337:Var3,[(1364,345)(1288,345)(1288,411)])
link(Op2,5955211:Var2,[(1371,345)(1437,345)(1437,401)(1525,401)])
}
Add(Memory,7185836,1519,266)
{
Default=Real(0)
}
Add(Math,4527431,1393,623)
{
link(onResult,8729294:doEvent1,[])
link(Op1,11608567:Var3,[(1399,611)(1288,611)(1288,705)])
link(Op2,13697432:Var2,[(1406,611)(1493,611)(1493,667)(1574,667)])
}
Add(Memory,7447193,1568,553)
{
Default=Real(0)
}
Add(Hub,4576585,595,280)
{
OutCount=3
link(onEvent1,7185836:doClear,[(987,286)(987,279)])
link(onEvent2,7447193:doClear,[(987,293)(987,566)])
link(onEvent3,10123011:doOperation,[(651,300)(651,356)])
}
Add(Hub,5195423,1449,357)
{
link(onEvent1,7185836:doValue,[(1490,363)(1490,272)])
link(onEvent2,7093707:doWrite,[(1501,370)(1501,440)])
}
Add(Hub,8729294,1505,623)
{
link(onEvent1,7447193:doValue,[(1548,629)(1548,559)])
link(onEvent2,12926802:doWrite,[(1547,636)(1547,706)])
}
Add(Hub,3541718,756,350)
{
OutCount=3
link(onEvent1,6040716:doStart,[])
link(onEvent2,5638166:doStart,[(819,363)(819,622)])
link(onEvent3,5500687:doWait,[(807,370)(807,839)])
}
Add(Matrix,12051191,910,84)
{
MatrixType=1
Point(Size)
link(Size,16562372:Result,[(916,56)(753,56)(753,227)(594,227)])
}
Add(Hub,2452385,210,315)
{
OutCount=4
link(onEvent1,15381342:doEvent1,[(254,321)(254,160)])
link(onEvent2,14060616:doCreate,[(696,328)(696,447)])
link(onEvent3,2697948:doCreate,[(693,335)(693,741)])
link(onEvent4,4336486:doStart,[])
}
Add(Math,16562372,588,154)
{
OpType=2
Op2=65537
ResultType=0
link(onResult,12051191:doSize,[(765,160)(765,90)])
link(Op1,16268648:Var3,[(594,124)])
}
Add(GetDataEx,16268648,532,119)
{
link(Data,8564700:Text,[])
}
Add(Hub,15381342,448,154)
{
link(onEvent1,16562372:doOperation,[])
link(onEvent2,3597073:doWork2,[(686,167)(686,97)])
}
Add(MatrixRW,7093707,1540,427)
{
link(Matrix,2899748:Var3,[(1546,124)])
link(Value,5955211:Var3,[(1553,348)])
link(X,13915104:Var3,[(1560,415)(1022,415)(1022,444)])
link(Y,2943337:Var2,[(1567,400)(1180,400)])
}
Add(GetDataEx,5955211,1519,343)
{
link(Data,7185836:Value,[])
}
Add(GetDataEx,13915104,476,439)
{
Angle=3
link(Data,2908886:Var3,[])
}
Add(MatrixRW,12926802,1575,693)
{
link(Matrix,382830:Var3,[(1581,236)])
link(Value,13697432:Var3,[(1588,621)])
link(X,13915104:Var2,[(1595,571)(482,571)])
link(Y,11608567:Var2,[(1602,681)(1187,681)])
}
Add(GetDataEx,13697432,1568,616)
{
link(Data,7447193:Value,[])
}
Add(Events,14060616,1169,441)
{
Name="1"
ManualReset=1
Point(doDestroy)
}
Add(WaitMultiple,5500687,994,833)
{
Count=2
link(onWait,9245367:doFor,[])
link(Handle1,14060616:ObjHandle,[(1000,702)(1175,702)])
link(Handle2,2697948:ObjHandle,[(1007,811)(1168,811)])
}
Add(Events,2697948,1162,735)
{
Name="2"
ManualReset=1
Point(doDestroy)
}
Add(GetDataEx,14590559,532,231)
{
link(Data,16268648:Var2,[])
}
Add(For,9245367,1141,833)
{
IncludeEnd=1
link(onEvent,11661528:doRead,[])
link(End,11676062:Var3,[(1154,544)])
}
Add(GetDataEx,11676062,1015,539)
{
link(Data,14056083:Var3,[(1021,250)])
}
Add(Memo,6106777,1722,833)
{
Left=80
Top=10
Width=325
Height=225
ScrollBars=3
}
Add(MatrixRW,11661528,1225,833)
{
link(onRead,6106777:doAdd,[])
link(Matrix,382830:Var2,[(1231,544)(1308,544)(1308,369)(1112,369)])
link(X,2908886:Var2,[(1245,630)(426,630)])
link(Y,9245367:Position,[(1252,792)(1200,792)(1200,877)(1147,877)])
}
Add(GetDataEx,2908886,420,439)
{
Angle=3
link(Data,4480166:Var2,[(417,444)(417,414)(440,414)])
}
Add(GetDataEx,11608567,1181,700)
{
Angle=2
link(Data,665584:Position,[(1187,715)(965,715)])
}
Add(Button,875331,1295,140)
{
Left=15
Top=85
Caption="Очистить"
link(onClick,4824629:doEvent1,[])
}
Add(Hub,4824629,1365,140)
{
link(onEvent1,6106777:doClear,[(1551,146)(1551,846)])
link(onEvent2,3597073:doWork3,[(1391,153)(1391,127)(886,127)])
}
Add(HubEx,3597073,882,91)
{
link(onEvent,12051191:doClear,[])
}
Add(Thread,6040716,896,350)
{
Delay=0
FastStop=0
Point(doStopFlag)
link(onExec,8829712:doFor,[])
}
Add(Thread,5638166,868,616)
{
Delay=0
FastStop=0
Point(doStopFlag)
link(onExec,665584:doFor,[])
}
Add(GetDataEx,382830,1106,231)
{
link(Data,2899748:Var2,[])
}
Add(Thread,4336486,329,336)
{
Delay=0
Point(doStopFlag)
link(onExec,9763613:doOperation,[])
}
Add(Math,9763613,392,336)
{
Op2=1
ResultType=0
link(onResult,15342242:doValue,[])
link(Op1,4480166:Var1,[(398,324)(426,324)(426,394)])
}
Add(Memory,15342242,448,336)
{
Default=Integer(-1)
link(onData,16574681:doCompare,[])
}
Add(GetDataEx,4480166,434,389)
{
Angle=1
link(Data,4097210:Var2,[(454,394)])
}
Add(If_else,16574681,497,336)
{
link(onTrue,4336486:doStopFlag,[(553,342)(553,402)(317,402)(317,356)])
link(onFalse,4576585:doEvent1,[(562,349)(562,286)])
link(Op1,4097210:Var3,[(503,324)(480,324)(480,383)])
link(Op2,14056083:Var2,[(510,295)(552,295)])
}
Add(GetDataEx,4097210,448,378)
{
link(Data,15342242:Value,[])
}
Add(GetDataEx,14056083,546,245)
{
Angle=3
link(Data,14590559:Var2,[(538,250)])
}
Add(For,665584,959,616)
{
IncludeEnd=1
link(onEvent,4527431:doOperation,[(1217,622)(1217,629)])
link(onStop,2697948:doSet,[(1077,629)(1077,748)])
link(Start,14582755:Var1,[(965,383)(776,383)])
link(End,11676062:Var2,[(972,568)(1021,568)])
}
Add(For,8829712,1043,350)
{
IncludeEnd=1
link(onEvent,12271454:doOperation,[(1231,356)(1231,363)])
link(onStop,14060616:doSet,[(1122,363)(1122,454)])
link(End,14582755:Var3,[(1056,338)(918,338)(918,394)])
}
Add(GetDataEx,2899748,1106,119)
{
Angle=3
link(Data,12051191:Matrix,[(916,124)])
}
Add(GetDataEx,2943337,1174,406)
{
Angle=2
link(Data,8829712:Position,[(1180,421)(1049,421)])
}



Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Width=430
}
Add(Math,10123011,693,350)
{
OpType=7
Op2=2
link(onResult,3541718:doEvent1,[(741,356)(741,342)])
link(Op1,14590559:Var3,[(699,236)])
}
Add(GetDataEx,14582755,770,389)
{
Angle=3
link(Data,10123011:Result,[(699,394)])
}
Add(Button,13200831,119,315)
{
Left=15
Top=55
Caption="Расчет"
link(onClick,2452385:doEvent1,[])
}
Add(Edit,8564700,532,49)
{
Left=15
Top=15
}
Add(Math,12271454,1358,357)
{
link(onResult,5195423:doEvent1,[])
link(Op1,2943337:Var3,[(1364,345)(1288,345)(1288,411)])
link(Op2,5955211:Var2,[(1371,345)(1437,345)(1437,401)(1525,401)])
}
Add(Memory,7185836,1519,266)
{
Default=Real(0)
}
Add(Math,4527431,1393,623)
{
link(onResult,8729294:doEvent1,[])
link(Op1,11608567:Var3,[(1399,611)(1288,611)(1288,705)])
link(Op2,13697432:Var2,[(1406,611)(1493,611)(1493,667)(1574,667)])
}
Add(Memory,7447193,1568,553)
{
Default=Real(0)
}
Add(Hub,4576585,595,280)
{
OutCount=3
link(onEvent1,7185836:doClear,[(987,286)(987,279)])
link(onEvent2,7447193:doClear,[(987,293)(987,566)])
link(onEvent3,10123011:doOperation,[(651,300)(651,356)])
}
Add(Hub,5195423,1449,357)
{
link(onEvent1,7185836:doValue,[(1490,363)(1490,272)])
link(onEvent2,7093707:doWrite,[(1501,370)(1501,440)])
}
Add(Hub,8729294,1505,623)
{
link(onEvent1,7447193:doValue,[(1548,629)(1548,559)])
link(onEvent2,12926802:doWrite,[(1547,636)(1547,706)])
}
Add(Hub,3541718,756,336)
{
OutCount=5
link(onEvent1,14060616:doCreate,[(970,342)(970,447)])
link(onEvent2,2697948:doCreate,[(966,349)(966,741)])
link(onEvent3,6040716:doStart,[])
link(onEvent4,5638166:doStart,[(819,363)(819,622)])
link(onEvent5,5500687:doWait,[(882,370)(882,839)])
}
Add(Matrix,12051191,910,84)
{
MatrixType=1
Point(Size)
link(Size,16562372:Result,[(916,56)(753,56)(753,227)(594,227)])
}
Add(Hub,2452385,210,315)
{
link(onEvent1,15381342:doEvent1,[(254,321)(254,160)])
link(onEvent2,4336486:doStart,[(276,328)(276,342)])
}
Add(Math,16562372,588,154)
{
OpType=2
Op2=65537
ResultType=0
link(onResult,12051191:doSize,[(765,160)(765,90)])
link(Op1,16268648:Var3,[(594,124)])
}
Add(GetDataEx,16268648,532,119)
{
link(Data,8564700:Text,[])
}
Add(Hub,15381342,448,154)
{
link(onEvent1,16562372:doOperation,[])
link(onEvent2,3597073:doWork2,[(686,167)(686,97)])
}
Add(MatrixRW,7093707,1540,427)
{
link(Matrix,2899748:Var3,[(1546,124)])
link(Value,5955211:Var3,[(1553,348)])
link(X,13915104:Var3,[(1560,415)(1022,415)(1022,444)])
link(Y,2943337:Var2,[(1567,400)(1180,400)])
}
Add(GetDataEx,5955211,1519,343)
{
link(Data,7185836:Value,[])
}
Add(GetDataEx,13915104,476,439)
{
Angle=3
link(Data,2908886:Var3,[])
}
Add(MatrixRW,12926802,1575,693)
{
link(Matrix,382830:Var3,[(1581,236)])
link(Value,13697432:Var3,[(1588,621)])
link(X,13915104:Var2,[(1595,571)(482,571)])
link(Y,11608567:Var2,[(1602,681)(1187,681)])
}
Add(GetDataEx,13697432,1568,616)
{
link(Data,7447193:Value,[])
}
Add(Events,14060616,1169,441)
{
Name="1"
ManualReset=1
Point(doDestroy)
}
Add(WaitMultiple,5500687,994,833)
{
Count=2
link(onWait,9245367:doFor,[])
link(Handle1,14060616:ObjHandle,[(1000,702)(1175,702)])
link(Handle2,2697948:ObjHandle,[(1007,811)(1168,811)])
}
Add(Events,2697948,1162,735)
{
Name="2"
ManualReset=1
Point(doDestroy)
}
Add(GetDataEx,14590559,532,231)
{
link(Data,16268648:Var2,[])
}
Add(For,9245367,1141,833)
{
IncludeEnd=1
link(onEvent,11661528:doRead,[])
link(End,11676062:Var3,[(1154,544)])
}
Add(GetDataEx,11676062,1015,539)
{
link(Data,14056083:Var3,[(1021,250)])
}
Add(Memo,6106777,1722,833)
{
Left=80
Top=10
Width=325
Height=225
ScrollBars=3
}
Add(MatrixRW,11661528,1225,833)
{
link(onRead,6106777:doAdd,[])
link(Matrix,382830:Var2,[(1231,544)(1308,544)(1308,369)(1112,369)])
link(X,2908886:Var2,[(1245,630)(426,630)])
link(Y,9245367:Position,[(1252,792)(1200,792)(1200,877)(1147,877)])
}
Add(GetDataEx,2908886,420,439)
{
Angle=3
link(Data,4480166:Var2,[(417,444)(417,414)(440,414)])
}
Add(GetDataEx,11608567,1181,700)
{
Angle=2
link(Data,665584:Position,[(1187,715)(965,715)])
}
Add(Button,875331,1295,140)
{
Left=15
Top=85
Caption="Очистить"
link(onClick,4824629:doEvent1,[])
}
Add(Hub,4824629,1365,140)
{
link(onEvent1,6106777:doClear,[(1551,146)(1551,846)])
link(onEvent2,3597073:doWork3,[(1391,153)(1391,127)(886,127)])
}
Add(HubEx,3597073,882,91)
{
link(onEvent,12051191:doClear,[])
}
Add(Thread,6040716,896,350)
{
Delay=0
FastStop=0
Point(doStopFlag)
link(onExec,8829712:doFor,[])
}
Add(Thread,5638166,868,616)
{
Delay=0
FastStop=0
Point(doStopFlag)
link(onExec,665584:doFor,[])
}
Add(GetDataEx,382830,1106,231)
{
link(Data,2899748:Var2,[])
}
Add(Thread,4336486,329,336)
{
Delay=0
Point(doStopFlag)
link(onExec,9763613:doOperation,[])
}
Add(Math,9763613,392,336)
{
Op2=1
ResultType=0
link(onResult,15342242:doValue,[])
link(Op1,4480166:Var1,[(398,324)(426,324)(426,394)])
}
Add(Memory,15342242,448,336)
{
Default=Integer(-1)
link(onData,16574681:doCompare,[])
}
Add(GetDataEx,4480166,434,389)
{
Angle=1
link(Data,4097210:Var2,[(454,394)])
}
Add(If_else,16574681,497,336)
{
link(onTrue,4336486:doStopFlag,[(553,342)(553,402)(317,402)(317,356)])
link(onFalse,4576585:doEvent1,[(562,349)(562,286)])
link(Op1,4097210:Var3,[(503,324)(480,324)(480,383)])
link(Op2,14056083:Var2,[(510,295)(552,295)])
}
Add(GetDataEx,4097210,448,378)
{
link(Data,15342242:Value,[])
}
Add(GetDataEx,14056083,546,245)
{
Angle=3
link(Data,14590559:Var2,[(538,250)])
}
Add(For,665584,959,616)
{
IncludeEnd=1
link(onEvent,4527431:doOperation,[(1217,622)(1217,629)])
link(onStop,2697948:doSet,[(1077,629)(1077,748)])
link(Start,14582755:Var1,[(965,383)(776,383)])
link(End,11676062:Var2,[(972,568)(1021,568)])
}
Add(For,8829712,1043,350)
{
IncludeEnd=1
link(onEvent,12271454:doOperation,[(1231,356)(1231,363)])
link(onStop,14060616:doSet,[(1122,363)(1122,454)])
link(End,14582755:Var3,[(1056,338)(918,338)(918,394)])
}
Add(GetDataEx,2899748,1106,119)
{
Angle=3
link(Data,12051191:Matrix,[(916,124)])
}
Add(GetDataEx,2943337,1174,406)
{
Angle=2
link(Data,8829712:Position,[(1180,421)(1049,421)])
}

карма: 1

0
Ответов: 4628
Рейтинг: 749
#30: 2020-10-16 15:34:11 ЛС | профиль | цитата
Схема большая чтобы разобраться. Попробуй более точно задать вопрос что именно интересует.
Вывод данных в Memo из параллельных потоков надо делать через компонент Synchronize.

Редактировалось 1 раз(а), последний 2020-10-16 15:34:31
карма: 26

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