2 / 2 / 0
Регистрация: 18.03.2015
Сообщений: 54
|
|
1 | |
Пррименение SaveValue11.11.2019, 13:59. Показов 2593. Ответов 4
Добрый день!
Есть задача, которая звучит так: На двух процессорную вычислительную систему в интервале 10-20 секунд (закон равномерный) поступают задания. Задание выполняется любым свободным процессором. Первый процессор выполняет задание в среднем за 30 секунд (закон экспоненциальный), а 2-ой за 22-38 секунд(закон равномерный). Если заняты оба процессора, то задание получает отказ в обслуживании. Провести моделирование выполнения 100000 заданий, определить загрузку процессоров и процент заданий, получивших отказ, и отношение числа заданий обработанных 1-м процессором к числу заданий, обработанных 2-м процессором. Необходимо вывести процент заданий, получивших отказ, а также заач, обработанных на первом и втором процессоре в качестве сохраняемых величин, но я не совсем понимаю как это сделать. На данный момент у меня код без сохраняемых величин: Код
generate(Uniform(1,10,20)) gate nu proc1,second seize proc1 advance (Exponential(1,0,30)) release proc1 terminate 1 Second gate nu proc2,otkaz seize proc2 advance (Uniform(1,22,38)) release proc1 terminate 1 Otkaz terminate 1 start 100000 Буду рад вашей помощи
0
|
11.11.2019, 13:59 | |
Ответы с готовыми решениями:
4
Разница между VARIABLE и SAVEVALUE Переменные в GPSS: EQU, SAVEVALUE, VARIABLE, ASSIGN Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
12.11.2019, 07:22 | 2 |
Добрый день.
Статистику удобно собирать в одном месте, а у Вас заявки выходят через три разных terminate. лучше сделать один terminate, а верхние заменить на transfer ,TERM тем самым отправляя по метке TERM где будет расчёт сохраняемых величин, а после - один общий terminate. Число заявок прошедших через блок N$имяМетки или NномерСтрокикода например N$Second. зная число обслуженных заявок (после release) на первом и втором блоке, а также число отказавших можно получить вероятность отказа как число отказавших задач/число обслуженных задач
1
|
2 / 2 / 0
Регистрация: 18.03.2015
Сообщений: 54
|
|
12.11.2019, 09:44 [ТС] | 3 |
Большое спасибо за ответ!
Я вчера уже тоже понял этот момент, но все равно не до конца понимаю логику данного языка, поэтому не могу понять как сделать так, чтобы именно после всех итераций вычислить эти значения. Я попробовал на одном примере, но считается неверно( Код
Generate (Uniform(1,10,20)) First gate nu proc1,Second Seize proc1 Advance (Exponential(1,0,30)) release proc1 transfer,End_1 Second gate nu proc2,Otkaz seize proc2 Advance (Uniform(1,22,38)) Release proc2 transfer,End_2 Otkaz transfer, End_3 End_1 Savevalue count_1+,1 Terminate 1 End_2 Savevalue count_2+,1 Terminate 1 End_3 Savevalue count_otkaz+,1 Terminate 1 Savevalue count_1proc,(X$count_1/(N$First+N$Second+N$Otkaz)#100) start 10000
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
13.11.2019, 15:24 | 4 |
Запись вычисляет немного не то, что нужно по заданию.
Код
Savevalue count_1proc,(X$count_1/(N$First+N$Second+N$Otkaz)#100) Числитель правильный X$count_1, а вот в знаменателе почемуто вместо фактических значений числа обработанных задач используются счётчики блоков. По порядку. Код
Generate (Uniform(1,10,20)) First gate nu proc1,Second В Second попадут все заявки, которые не подошли по условию First. То есть число заявок проходящих через Second = Все - First или число заявок обслуживающихся на устройстве 2 + отказных. Правильный счётчик заявок обслуженных на устройстве 2 - X$count_2 Число заявок которым отказано в обслуживании N$Otkaz или X$count_otkaz Логику программы Вы вроде понимаете по коду. Заявка просто двигается по коду как бы сверху -вниз) начиная с блоков GENERATE в определённые случайные интервалы времени согласно заданным временным интервалам и условиям движения.
1
|
2 / 2 / 0
Регистрация: 18.03.2015
Сообщений: 54
|
|
19.11.2019, 00:14 [ТС] | 5 |
Поправил с учетом комментариев. Насколько я понимаю сейчас все верно?)
Большое спасибо за помощь! Код
Generate (Uniform(1,10,20)) First gate nu proc1,Second Seize proc1 Advance (Exponential(1,0,30)) release proc1 Savevalue count_1+,1 transfer,End_ Second gate nu proc2,Otkaz seize proc2 Advance (Uniform(1,22,38)) Release proc2 Savevalue count_2+,1 transfer,End_ Otkaz transfer, End_3 End_3 Savevalue count_otkaz+,1 Terminate 1 End_ Savevalue count_1proc,(X$count_1/(X$count_1+X$count_2+N$Otkaz)#100) Savevalue count_2proc,(X$count_2/(X$count_1+X$count_2+N$Otkaz)#100) Savevalue count_otkaz_proc,(X$count_otkaz/(X$count_1+X$count_2+N$Otkaz)#100) start 10000 Поспешил с ответом. Действительно нужно найти отношение обработанных заявок на 1 проц к заявкам, обработанным на 2-м проц. Код
Generate (Uniform(1,10,20)) First gate nu proc1,Second Seize proc1 Advance (Exponential(1,0,30)) release proc1 Savevalue count_1+,1 transfer,End_ Second gate nu proc2,Otkaz seize proc2 Advance (Uniform(1,22,38)) Release proc2 Savevalue count_2+,1 transfer,End_ Otkaz transfer, End_3 End_3 Savevalue count_otkaz+,1 Terminate 1 End_ Savevalue count_1by2proc,(X$count_1/(X$count_2)#100) Savevalue count_otkaz_proc,(X$count_otkaz/(X$count_1+X$count_2+N$Otkaz)#100) Terminate 1 start 100000 Как справиться с данной проблемой?
0
|
19.11.2019, 00:14 | |