Вверх ↑
Этот топик читают: Гость
Ответов: 60
Рейтинг: 0
#31: 2020-10-16 15:41:31 ЛС | профиль | цитата
Вопрос по схемам- когда надо создавать события?
В первой схеме один раз создались события, во второй сколько итераций по циклу, столько созданий событий.

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

0
Ответов: 4525
Рейтинг: 722
#32: 2020-10-16 16:03:07 ЛС | профиль | цитата
Обнови пакет из SVN - там компонент Events не требует явного создания.
карма: 26

0
Ответов: 60
Рейтинг: 0
#33: 2020-10-16 17:03:29 ЛС | профиль | цитата
Спасибо, буду пробовать.
карма: 1

0
Ответов: 60
Рейтинг: 0
#34: 2020-10-26 15:14:00 ЛС | профиль | цитата
По последним схемам наоборот, короткие расчеты работают на нескольких процессорах, а продолжительные все равно как один поток выполняются. А в моих вычислениях по этим же схемам вообще могут не выполняться расчеты, такое чувство, что неправильная схема и неправильно выполняется элемент waitmultiple.

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

0
Ответов: 4525
Рейтинг: 722
#35: 2020-10-26 15:57:00 ЛС | профиль | цитата
Gik писал(а):
а продолжительные все равно как один поток выполняются
Значит, где-то есть либо постановка потоков в очередь (как при доступе к визуальным компонентам), либо действительно выполняется один поток, когда остальные завершились.
Gik писал(а):
по этим же схемам вообще могут не выполняться расчеты
Может быть неправильная логика работы потоков (тогда и проблемы с параллельностью), либо какая-нибудь ошибка в компонентах.
карма: 26

0
Ответов: 60
Рейтинг: 0
#36: 2020-10-26 16:04:13 ЛС | профиль | цитата

либо действительно выполняется один поток, когда остальные завершились.


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

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

0
Ответов: 8725
Рейтинг: 807
#37: 2020-10-26 17:11:43 ЛС | профиль | цитата
Gik, вот четыре потока для четырёхядерного процессора:
4


Add(MainForm,5642691,224,105)
{
Width=377
Height=263
Color=16777215
Caption="CPU Load example"
Position=1
link(onCreate,2552280:doGetCPULoad,[])
}
Add(MultiElementEx,2552280,273,119)
{
@Hint=#8:CPU load|
link(onCPULoad,12507638:doStrCat,[])
}
BEGIN_SDK
Add(EditMultiEx,15675124,21,21)
{
WorkCount=#12:doGetCPULoad|
EventCount=#9:onCPULoad|
Width=293
Height=249
VOffset=70
HOffset=70
link(doGetCPULoad,1927317:doConsoleExec,[])
}
Add(WinExec,1927317,63,77)
{
Param=""\\Процессор(_Total)\\% загруженности процессора""
FileName="typeperf.exe"
Point(onConsoleResult)
Point(doConsoleExec)
Point(doConsoleInput)
link(onConsoleResult,9965899:doCharset,[])
}
Add(Charset,9965899,112,84)
{
link(onCharset,9823270:doSplit,[])
}
Add(MultiStrData,9823270,161,84)
{
Char=","
link(onPart2,3365561:doReplace,[])
}
Add(Replace,3365561,203,91)
{
SubStr="""
link(onReplace,13684907:doOperation,[])
}
Add(Math,13684907,252,91)
{
OpType=35
Op2=0.01
link(onResult,15675124:onCPULoad,[])
}
END_SDK
Add(Edit,15363736,371,119)
{
Left=20
Top=10
Width=85
}
Add(Button,1065734,224,168)
{
Left=25
Top=40
link(onClick,15542695:doNext,[])
}
Add(Button,7126158,224,217)
{
Left=25
Top=75
link(onClick,11805529:doNext,[])
}
Add(Button,9214570,224,266)
{
Left=25
Top=110
link(onClick,8034757:doNext,[])
}
Add(Button,7747256,224,315)
{
Left=25
Top=145
link(onClick,8648128:doNext,[])
}
Add(LED,3651411,420,161)
{
Left=115
Top=40
}
Add(LED,15518141,420,210)
{
Left=115
Top=75
}
Add(LED,2720449,420,259)
{
Left=115
Top=105
}
Add(LED,6799513,420,308)
{
Left=115
Top=145
}
Add(Counter,15542695,273,168)
{
Max=1
link(onNext,6851087:doEvent,[])
}
Add(IndexToChanel,6851087,322,168)
{
link(onEvent1,3251148:doEvent1,[])
link(onEvent2,3715844:doEvent1,[(361,181)(361,195)])
}
Add(Thread,3731373,462,196)
{
Delay=0
link(onExec,9853409:doOperation,[])
}
Add(Hub,3251148,371,168)
{
link(onEvent1,3651411:doOff,[])
link(onEvent2,3731373:doStop,[(396,181)(396,209)])
}
Add(Hub,3715844,371,189)
{
link(onEvent1,3651411:doOn,[(403,195)(403,181)])
link(onEvent2,3731373:doStart,[])
}
Add(Math,9853409,511,196)
{
Op2=1
link(onResult,13455189:doValue,[])
link(Op1,9853409:Result,[(517,187)(503,187)(503,234)(517,234)])
}
Add(Counter,11805529,273,217)
{
Max=1
link(onNext,7500533:doEvent,[])
}
Add(IndexToChanel,7500533,322,217)
{
link(onEvent1,1340880:doEvent1,[])
link(onEvent2,15251572:doEvent1,[(361,230)(361,244)])
}
Add(Thread,12317268,462,245)
{
Delay=0
link(onExec,9259945:doOperation,[])
}
Add(Hub,1340880,371,217)
{
link(onEvent1,15518141:doOff,[])
link(onEvent2,12317268:doStop,[(396,230)(396,258)])
}
Add(Hub,15251572,371,238)
{
link(onEvent1,15518141:doOn,[(403,244)(403,230)])
link(onEvent2,12317268:doStart,[])
}
Add(Math,9259945,511,245)
{
Op2=1
link(onResult,15295382:doValue,[])
link(Op1,9259945:Result,[(517,237)(503,237)(503,284)(517,284)])
}
Add(Counter,8034757,273,266)
{
Max=1
link(onNext,1021623:doEvent,[])
}
Add(IndexToChanel,1021623,322,266)
{
link(onEvent1,9808538:doEvent1,[])
link(onEvent2,457070:doEvent1,[(361,279)(361,293)])
}
Add(Thread,14706535,462,294)
{
Delay=0
link(onExec,12963251:doOperation,[])
}
Add(Hub,9808538,371,266)
{
link(onEvent1,2720449:doOff,[])
link(onEvent2,14706535:doStop,[(396,279)(396,307)])
}
Add(Hub,457070,371,287)
{
link(onEvent1,2720449:doOn,[(403,293)(403,279)])
link(onEvent2,14706535:doStart,[])
}
Add(Math,12963251,511,294)
{
Op2=1
link(onResult,5958929:doValue,[])
link(Op1,12963251:Result,[(517,288)(504,288)(504,332)(517,332)])
}
Add(Counter,8648128,273,315)
{
Max=1
link(onNext,5479302:doEvent,[])
}
Add(IndexToChanel,5479302,322,315)
{
link(onEvent1,12689438:doEvent1,[])
link(onEvent2,2846282:doEvent1,[(361,328)(361,342)])
}
Add(Thread,3554298,462,343)
{
Delay=0
link(onExec,7373929:doOperation,[])
}
Add(Hub,12689438,371,315)
{
link(onEvent1,6799513:doOff,[])
link(onEvent2,3554298:doStop,[(396,328)(396,356)])
}
Add(Hub,2846282,371,336)
{
link(onEvent1,6799513:doOn,[(403,342)(403,328)])
link(onEvent2,3554298:doStart,[])
}
Add(Math,7373929,511,343)
{
Op2=1
link(onResult,5710205:doValue,[])
link(Op1,7373929:Result,[(517,336)(505,336)(505,382)(517,382)])
}
Add(Memory,13455189,553,196)
{
}
Add(Memory,15295382,553,245)
{
}
Add(Memory,5958929,553,294)
{
}
Add(Memory,5710205,553,343)
{
}
Add(StrCat,12507638,322,119)
{
Str2=" %"
link(onStrCat,15363736:doText,[])
}

карма: 20

0
Ответов: 60
Рейтинг: 0
#38: 2020-10-26 17:36:19 ЛС | профиль | цитата
Понятно.
Только мне еще надо, чтобы они с массивом данных работали.
карма: 1

0
Ответов: 4525
Рейтинг: 722
#39: 2020-10-26 17:47:09 ЛС | профиль | цитата
Gik писал(а):
Может такое, что у всех потоков доступ к одной матрице данных?
Может. Но если не предпринять дополнительных мер - то это будет параллельный доступ. На чтение допустимо, но если происходит запись - то надо разделять с помощью компонента SafeMode. Но тогда будет "немножко" последовательно.
карма: 26

0
Ответов: 8725
Рейтинг: 807
#40: 2020-10-26 19:37:46 ЛС | профиль | цитата
Gik писал(а):
..чтобы они с массивом данных работали..

Ну а попробовать Три кнопки на чтение, четвёртая на запись.


Add(MainForm,5642691,133,154)
{
Width=377
Height=263
Color=16777215
Caption="CPU Load example"
Position=1
link(onCreate,12693376:doEvent1,[])
}
Add(MultiElementEx,2552280,217,182)
{
@Hint=#8:CPU load|
link(onCPULoad,12507638:doStrCat,[])
}
BEGIN_SDK
Add(EditMultiEx,15675124,21,21)
{
WorkCount=#12:doGetCPULoad|
EventCount=#9:onCPULoad|
Width=293
Height=249
VOffset=70
HOffset=70
link(doGetCPULoad,1927317:doConsoleExec,[])
}
Add(WinExec,1927317,63,77)
{
Param=""\\Процессор(_Total)\\% загруженности процессора""
FileName="typeperf.exe"
Point(onConsoleResult)
Point(doConsoleExec)
Point(doConsoleInput)
link(onConsoleResult,9965899:doCharset,[])
}
Add(Charset,9965899,112,84)
{
link(onCharset,9823270:doSplit,[])
}
Add(MultiStrData,9823270,161,84)
{
Char=","
link(onPart2,3365561:doReplace,[])
}
Add(Replace,3365561,203,91)
{
SubStr="""
link(onReplace,13684907:doOperation,[])
}
Add(Math,13684907,252,91)
{
OpType=35
Op2=0.01
link(onResult,15675124:onCPULoad,[])
}
END_SDK
Add(Edit,15363736,315,182)
{
Left=20
Top=10
Width=85
}
Add(Button,1065734,168,231)
{
Left=25
Top=40
link(onClick,15542695:doNext,[])
}
Add(Button,7126158,168,280)
{
Left=25
Top=75
link(onClick,11805529:doNext,[])
}
Add(Button,9214570,168,329)
{
Left=25
Top=110
link(onClick,8034757:doNext,[])
}
Add(Button,7747256,168,378)
{
Left=25
Top=145
link(onClick,8648128:doNext,[])
}
Add(LED,3651411,364,224)
{
Left=115
Top=40
}
Add(LED,15518141,364,273)
{
Left=115
Top=75
}
Add(LED,2720449,364,322)
{
Left=115
Top=105
}
Add(LED,6799513,364,371)
{
Left=115
Top=145
}
Add(Counter,15542695,217,231)
{
Max=1
link(onNext,6851087:doEvent,[])
}
Add(IndexToChanel,6851087,266,231)
{
link(onEvent1,3251148:doEvent1,[])
link(onEvent2,3715844:doEvent1,[(305,244)(305,258)])
}
Add(Thread,3731373,406,259)
{
Delay=0
link(onExec,2947381:doNext,[])
}
Add(Hub,3251148,315,231)
{
link(onEvent1,3651411:doOff,[])
link(onEvent2,3731373:doStop,[(340,244)(340,272)])
}
Add(Hub,3715844,315,252)
{
link(onEvent1,3651411:doOn,[(347,258)(347,244)])
link(onEvent2,3731373:doStart,[])
}
Add(Counter,11805529,217,280)
{
Max=1
link(onNext,7500533:doEvent,[])
}
Add(IndexToChanel,7500533,266,280)
{
link(onEvent1,1340880:doEvent1,[])
link(onEvent2,15251572:doEvent1,[(305,293)(305,307)])
}
Add(Thread,12317268,406,308)
{
Delay=0
link(onExec,9994515:doNext,[])
}
Add(Hub,1340880,315,280)
{
link(onEvent1,15518141:doOff,[])
link(onEvent2,12317268:doStop,[(340,293)(340,321)])
}
Add(Hub,15251572,315,301)
{
link(onEvent1,15518141:doOn,[(347,307)(347,293)])
link(onEvent2,12317268:doStart,[])
}
Add(Counter,8034757,217,329)
{
Max=1
link(onNext,1021623:doEvent,[])
}
Add(IndexToChanel,1021623,266,329)
{
link(onEvent1,9808538:doEvent1,[])
link(onEvent2,457070:doEvent1,[(305,342)(305,356)])
}
Add(Thread,14706535,406,357)
{
Delay=0
link(onExec,16313613:doNext,[])
}
Add(Hub,9808538,315,329)
{
link(onEvent1,2720449:doOff,[])
link(onEvent2,14706535:doStop,[(340,342)(340,370)])
}
Add(Hub,457070,315,350)
{
link(onEvent1,2720449:doOn,[(347,356)(347,342)])
link(onEvent2,14706535:doStart,[])
}
Add(Counter,8648128,217,378)
{
Max=1
link(onNext,5479302:doEvent,[])
}
Add(IndexToChanel,5479302,266,378)
{
link(onEvent1,12689438:doEvent1,[])
link(onEvent2,2846282:doEvent1,[(305,391)(305,405)])
}
Add(Thread,3554298,406,406)
{
Delay=0
link(onExec,12677156:doNext,[])
}
Add(Hub,12689438,315,378)
{
link(onEvent1,6799513:doOff,[])
link(onEvent2,3554298:doStop,[(340,391)(340,419)])
}
Add(Hub,2846282,315,399)
{
link(onEvent1,6799513:doOn,[(347,405)(347,391)])
link(onEvent2,3554298:doStart,[])
}
Add(StrCat,12507638,266,182)
{
Str2=" %"
link(onStrCat,15363736:doText,[])
}
Add(Hub,12693376,175,168)
{
OutCount=3
link(onEvent1,185242:doFor,[(248,174)(248,146)])
link(onEvent2,9656055:doData,[(200,181)(200,132)])
link(onEvent3,2552280:doGetCPULoad,[])
}
Add(Counter,2947381,462,259)
{
Max=999
link(onNext,11335198:doRead,[])
}
Add(Counter,9994515,462,308)
{
Max=999
link(onNext,9073281:doRead,[])
}
Add(Counter,16313613,462,357)
{
Max=999
link(onNext,6301844:doRead,[])
}
Add(Counter,12677156,462,406)
{
Max=999
link(onNext,13762172:doRandom,[])
}
Add(For,185242,266,140)
{
End=999
link(onEvent,11045634:doRandom,[])
}
Add(IntegerArray,7207166,371,70)
{
IntArray=[]
}
Add(ArrayRW,11864150,371,126)
{
link(Array,6550087:Var2,[])
}
Add(Random,11045634,315,140)
{
Min=1000
Max=9999
link(onRandom,11864150:doAdd,[])
}
Add(ArrayRW,11335198,518,259)
{
link(onRead,9674812:doValue,[])
link(Array,1950896:Var1,[(524,250)])
}
Add(ArrayRW,9073281,518,308)
{
link(onRead,12273051:doValue,[])
link(Array,2437848:Var1,[(524,299)])
}
Add(ArrayRW,6301844,518,357)
{
link(onRead,2480810:doValue,[])
link(Array,1119521:Var1,[(524,348)])
}
Add(ArrayRW,6991780,609,406)
{
link(Array,1119521:Var2,[])
link(Index,12677156:Count,[(622,397)(559,397)(559,446)(468,446)])
}
Add(Random,13762172,511,406)
{
Min=1000
Max=9999
link(onRandom,6991780:doWrite,[(564,412)(564,419)])
}
Add(GetDataEx,6550087,371,112)
{
link(Data,7207166:Array,[])
}
Add(GetDataEx,1119521,609,343)
{
link(Data,2437848:Var2,[])
}
Add(GetDataEx,2437848,609,294)
{
link(Data,1950896:Var2,[])
}
Add(GetDataEx,1950896,609,245)
{
link(Data,6550087:Var3,[(615,117)])
}
Add(Memory,9674812,567,259)
{
}
Add(Memory,12273051,567,308)
{
}
Add(Memory,2480810,567,357)
{
}
Add(DoData,9656055,210,126)
{
link(onEventData,5642691:doCaption,[(249,132)(249,118)(123,118)(123,160)])
link(Data,7207166:Count,[(216,110)(384,110)])
}

карма: 20

0
Ответов: 60
Рейтинг: 0
#41: 2020-10-27 09:51:36 ЛС | профиль | цитата
Спасибо. Только надо ближе к последним моим схемам.
карма: 1

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