Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 Re: Как правильно вычислить ср.скорость нескольких потоков
Аватара пользователя
Как всегда, когда встает вопрос "какое определение использовать", нужно сначала ответить на другой вопрос - что вы собираетесь делать с ответом?
Evgkegkis в сообщении #1564777 писал(а):
Вопрос: какая, в среднем, скорость была в данной ситуации?
Можете привести причины, почему ответ $42$ не подходит?

 Re: Как правильно вычислить ср.скорость нескольких потоков
Evgkegkis в сообщении #1564777 писал(а):
Не знаю как вам точнее ответить, поэтому постараюсь уточнить ситуацию:
Это 5 клиентов, которые фактически получили такой объем данных за такое время. Вопрос: какая, в среднем, скорость была в данной ситуации?
Задача недоопределена, так что ответ может быть каким угодно.
На вашей маньере, возьмем такие числа:
1 поток: Передано 7MB за 3 секунд
2 поток: Передано 8МB за 100000 секунд.
Допустим для определенности, что эти передачи шли по потоков с постоянной скорости за эти времена, т.е. по первом потоке передача шла равномерно 3 секунды со скорости 7/3 MB/с, по втором потоке передача шла равномерно 100000 секунд со скорости 8/100000 MB/с.
Пусть также допустим для определенности, что данные начали передаваться одновременно в момент t=0 - тоесть те 3 секунды которые данные передавались по первому потоку, и есть первые 3 секунды из 100 000 секунд которые данные передавались по второму (а то даже как перекрываются соответные времевые интервалы, у вас также не уточнено).

Теперь, если доопределять задачу по-разному, можно получить разные (очевидно верные!) ответы.

1. Допустим, что получатель принимал данные только первых три секунд при 0<t<3, и именно за этот период ищется средняя скорость.
Очевидно, за эти 3 секунды получатель получил 7+8/100000*3= 7.00024 MB, итого средняя скорость общего трансфера за эти три секунды была 7.00024 /3 = 2.33341(3) МB/с, или "средняя скорость в среднем на поток" (если ищется именно это что также неясно) есть (2.33341(3)/2) = 1.16670(6) МB/(с*поток).

2. Допустим, что получатель принимал эти данные всех 100 000 секунд при 0<t<100000, и именно за этот период ищется средняя скорость.
Для потока 2 все известно за этих 100 000 секунд. Однако, для потока 1 непонятно после первых три секунд что было? Может он продолжал передавать со скорости 7/3 МB/сек всех этих 99 997 секунд? Или, он передал 7MB, а остальных 99 997 секунд ничего не передавал? Или что-то другое??
В зависимости от того что предполагается для потока 1 распишем например два варианта (а при других предположений для потока 1, можно получить любые числа):
2.1. Поток 1 продолжал передавать со скорости 7/3 MB/сек остальных 99 997 секунд.
Тогда за все время 100000 секунд, получатель принял суммарно (7/3 MB/с*100000с + 8МB) = 233341.3(3) МB данных, средняя скорость общего трансфера по всех потоков была 2.33341(3) MB/сек, а "средняя скорость в среднем на поток" 2.33341(3)/2 = 1.16670(6) MB/(с*поток).
2.2. Поток 1 передал только 7MB первых 3 секунд со скорости 7/3 MB/сек , и потом не передавал ничего.
Тогда за все время 100000 секунд, получатель принял суммарно (7Mс + 8МB) = 15 МB данных, средняя скорость общего трансфера по всех потоков была 15/100000 = 0.00015 MB/сек, а "средняя скорость в среднем на поток" 15/100000/2 = 0.000075 MB/(с*поток).

Теперь должно быть очевидным, что ответ зависит от следующих предположений (и если их не уточнять, можно получать какие угодно бессмысленные числа):
- Что именно вычисляется, "средняя скорость общего трансфера вообще" размерности MB/с, или "средняя скорость в среднем на поток" размерности MB/(с*поток). Во втором случае, очевидно нужно еще и поделить среднюю скорость трансфера (по всех потоков), на количество потоков.
- Как взаимно перекрываются те времена, для которых в условии дана передача потоковых данных
- для тех интервалов что даны для потоков, считаем ли скорость каждого потока равномерной во времени
- Как перекрывается с этих времен "время получения данных", для которого именно получатель вычисляет соответную "среднюю скорость"
- Сколько считаем что передавалось (или не передавалось) по потоков, во временах для которых в условия задачи не сказано но все-таки "получатель получал", и они должны быть включены в рассчете соответной "средней скорости"

-- 16.09.2022, 19:45 --

Evgkegkis в сообщении #1564730 писал(а):
Мнение1: нужно сложить все мбит и разделить на все время: (10+8+5+10+20):(7+4+20+1+14)=53:46=1.15 Мбит/с
Мнение 2: Нужно вычислить скорость для каждого потока и выполнить усреднение скоростей: (10:7+8:4+5:20+10:1+20:14):5 = 3.02
Кстати.

"Мнение 1" соответствует следующим предположениям:
- Каждый канал передал свои данные, и ничего больше. Например потоки передавали свои данные по очереди, а в остальное время ничего не передавали (передача была НЕ параллельна) но это не обязательно; существенно то что каждый из каналов передал только "свое" количество данных и ничего больше. "Окно" приема получателя равно суммой всех времен в условии (поэтому и не важно на это время как перекрываются времена передачи потоков), и получатель за это время сумел получить всех данных из всех потоков. На отличие от другого случая, ищется "средняя скорость получения в общем по всех потоков", а НЕ "средняя скорость в среднем на поток" так как НЕ делим на к-во потоков; размерность величины MB/с.

"Мнение 2" соответствует следующим предположениям:
- Скорость каждого потока все время постоянна (при этом очевидно времевой интервал при который принимает получатель, и для которого он вычисляет среднюю скорость, не имеет значения); т.е. для достаточно длинного времени, по любому потоку передастся какое угодно количество данных если скорость потока не нулевая. Ищется не просто "средняя скорость получения в общем по всех потоков", а "средняя скорость в среднем на поток" так как делим на к-во потоков; размерность величины MB/(с * поток)

 Re: Как правильно вычислить ср.скорость нескольких потоков
Короче, определение скорости [количество изменения чего-то]/[время за которое изменилось] никто не отменял.
Тоесть в данном случае, по определению скорости нужно вычислять так [количество данных принятых суммарно по всех потоков за последних n секунд]/n где n - выбранное времевое окно в секундах.
Это и будет типа "мгновенная скорость" передачи данных.
Если предпочтительнее усреднять затухающе к прошлом (учитывать прошлые периоды но не с тем же а с меньшим весом), то можно использовать формулу например:
V = (1*[к-во данных принятых по всех п-в за последнюю секунду] + k[к-во данных принятых по всех п-в за предыдущую секунду]/n + k^2[к-во данных принятых по всех п-в за по-предыдущую секунду] + ....)/(1+k + k^2 + ...)
где 0<k<1 коеффициент "затухания-к-прошлом", а ряд обрывается через m членов (при "достаточно малом" k^m).
Это можно делать эффективно на очереди реализованной на кольцевом буффере; величину k и длину ряда выбрать наперед и суммарного веса (1+k + k^2 + ...) вычислить однажды предварительно.
Разумеется если нужна не просто "средняя скорость передачи" а "средняя скорость передачи в среднем на поток" то нужно делить еще и на количество потоков.

 Re: Как правильно вычислить ср.скорость нескольких потоков
Давайте я приложу файл, и задам вопрос - насколько корректен в нем расчет, относительно определений, в нем же используемых: ср.скорость на пользователя, и ср.секторная скорость.


ссылка на файл

Если не дает скачать - дайте знать пжл

Средняя пользовательская (Ue) скорость сектора 1 считается как $\frac{L 12}{M 12}$

Средняя пользовательская скорость(Ue) сектора2 считается как $\frac{L 13}{M 13}$

Cредняя секторная скорость сектора 1 считается как $\frac{L 12}{K 11}$

Средняя секторная скорость сектора 2 считается как $\frac {L 13}{K 11}$

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

 Re: Как правильно вычислить ср.скорость нескольких потоков
Аватара пользователя
Evgkegkis, Вы ужасно делаете ссылки. Такой способ годится только в случаях, когда адрес короткий. А длинный адрес приводит к большим неудобствам для читателей. Правильный формат такой:
Код:
[url=адрес]Пояснения.[/url]

 Re: Как правильно вычислить ср.скорость нескольких потоков
Evgkegkis в сообщении #1564811 писал(а):
Давайте я приложу файл, и задам вопрос
Ссылка требует логина в яндексе, которого у меня нет и не будет.
Но подумайте сами, "условия" вашей "задачи" не дают возможности ответить однозначно на простейший вопрос: какое суммарное количество информации, получил рецепиент в течении например, последних 100 секунд? (или 3, или 12 секунд; без значения) через всех потоков? И почему?
Поэтому, пока не будет большей ясности о чем идет конкретно речь, каких-нибудь "скоростей передачи" вычислять бессмысленно.

 Re: Как правильно вычислить ср.скорость нескольких потоков
Аватара пользователя
Evgkegkis в сообщении #1564811 писал(а):
Давайте я приложу файл
manul91 в сообщении #1564843 писал(а):
Ссылка требует логина в яндексе, которого у меня нет и не будет.
Evgkegkis, Яндекс-диск позволяет расшаривать файлы так, чтобы по ссылке их можно было скачать, не авторизуясь. Не могу показать вам, куда там нужно ткнуть, но возможность такая есть точно.

 Posted automatically
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Карантин»
по следующим причинам:

- для коррекции ошибок, упомянутых в предыдущих сообщениях.

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 Posted automatically
 i  Тема перемещена из форума «Карантин» в форум «Помогите решить / разобраться (М)»

 Re: Как правильно вычислить ср.скорость нескольких потоков
Evgkegkis в сообщении #1564811 писал(а):
Давайте я приложу файл, и задам вопрос - насколько корректен в нем расчет, относительно определений, в нем же используемых: ср.скорость на пользователя, и ср.секторная скорость.
Я правильно понимаю, что данные в столбцов $C$-$J$ отвечают последовательными интервалами времени длительности 1сек?
Например столбец $C$ определяет данные полученные юзерами (по соответными каналами) в интервале 9:00:00 - 9:00:01 утра, столбец $D$ определяет данные полученные юзерами в интервале 9:00:01 - 9:00:02 утра, ..... , столбец $J$ определяет данные полученные юзерами в интервале 9:00:07 - 9:00:08 утра?
Тогда короткий ответ - расчет полностью некорректен.
Evgkegkis в сообщении #1564811 писал(а):
Мое мнение, исходя из всего что выше было написано, данные расчеты некорректны относительно их определений
Нет, предоставленные данные дают возможности расчитать вполне корректные скорости на этом интервале из 8 секунд.
Более того, данные настолько подробны что можно посчитать даже как менялись скорости на этом интервале.

Почему рассчет в файле некорректен?
Короткий ответ: Потому что определение среднего: это "сумма однородных величин (в вашем случае, скоростей) поделенная на количество этих величин". И потому что ноль - число как все остальные, и его нужно третировать соответственно.

Развернутый ответ для понимания почему такой рассчет неправилен:

Вот подумайте насчет скорости только юзера 7 (из второго сектора).
Как рассчитать его скорость?
Что нам известно: что в интервале 8 секунд (с 9:00:00 до 9:00:08 утра) он получил суммарно 38Mb. Значит, его скорость можно (и нужно!) посчитать как $\frac{38Mb}{8sec} = 4.75 \frac{Mb}{sec}$.
Что такое "время седьмого юзера равно 6"???
Время на всех юзеров общее и одно и то же, они живут в одном и том же мире (общую теорию относительности пока не будем рассматривать). Интервал времени для всех юзеров известен и один и тот же, и он равен 8-ми секунд, с 9:00:00 до 9:00:08 утра (их скорости на этом интервале даже меняются и непостоянны, но это пока только усложнит дело, пока вы не разобрались еще как считать скорость в простейшем случае).

Почему вы не учитываете последние две секунды для юзера 7, и тем более по-разному не учитываете разные секунды для разных юзеров? Потому что "ячейки пустые", "юзер не получал данные" в этих двух секунд?
Но вот посмотрите, допустим данные для юзера 7 чуть-чуть незначительно изменились - в каждой из последних двух секунд, пусть он получал не 0Mb данных, а скажем по 0.0000000000001Mb каждую секунду.
Тогда входные данные для этого юзера в табличке, изменились несущественно (получил не 38MBit за этих 8 секунд, а 38.0000000000002Mbit) - но вы теперь по вашему "методу" будете вынуждены уже делить не на 6, а на 8 (ибо ячейки-то $I$ и $J$ для 7-ого юзера теперь "не пустые", "его время равно 8") - и вычисленная "скорость" для него по вашему "методу" перетерпит резкий скачок: опустится с 6.(3) Mb/сек, на 4.750 000 000 000 025 Mb/сек.

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

 Re: Как правильно вычислить ср.скорость нескольких потоков
Цитата:
Я правильно понимаю, что данные в столбцов $C$-$J$ отвечают последовательными интервалами времени длительности 1сек?

Да, верно понимаете

Цитата:
Почему вы не учитываете последние две секунды для юзера 7, и тем более по-разному не учитываете разные секунды для разных юзеров? Потому что "ячейки пустые", "юзер не получал данные" в этих двух секунд?

Юзер не получал данные.

В целом я все понял. Большое спасибо за подробный расклад и ответы. Очень помогло!

 Re: Как правильно вычислить ср.скорость нескольких потоков
Evgkegkis в сообщении #1565006 писал(а):
В целом я все понял. Большое спасибо за подробный расклад и ответы. Очень помогло!
Раз вы все поняли и данные у вас настолько подробны каждую секунду, то добавлю как примерно рассчитывать и "текущие скорости".

Можно выбрать "времевое окно" например в 3 секунд (оно выбирается только один раз, и потом для всех рассчетов должно быть одинаковым).
Выбор ширины окна определяет насколько будут "сглажены" изменения скоростей во времени. (самое малое "окно" которое ваши данные позволяют выбрать - это разумеется одна секунда).

Тогда, "скорость юзера 7 в момент 9:00:03 утра" можно примерно определить как суммарные данные полученные юзером 7 в последних трех секунд между 9:00:00 и 9:00:03 утра, поделенные на этих же последних трех секунд времени за которого он их получил (тоесть (6+6+6)/3).
Потом чтобы получить скорость того же юзера 7 "в следующий момент 9:00:04 утра" (следующую секунду) - сдвигаем "трисекундное окно" на одну секунду вперед - и вычисляем суммарные данные полученные юзером 7 между 9:00:01 и 9:00:04 утра поделенные на этот интервал времени за которого он их получил (тоесть опять будет (6+6+6)/3).
Далее чтобы получить "скорость юзера 7 в момент 9:00:05 утра" (следующую секунду) - сдвигаем "трисекундное окно" на еще одну секунду вперед - и вычисляем суммарные данные полученные юзером 7 между 9:00:02 и 9:00:05 утра поделенные на этот интервал времени за которого он их получил (теперь уже будет (6+6+5)/3).
"Пустые ячейки" разумеется тоже нужно учитывать как нулями. Всегда единообразно делим на 3 - т.е. на ширину выбранного времевого окна (пользуем одно и то же времевое окно для всех юзеров, в каждом моменте времени).
Аналогично для всех остальных юзеров.

Потом, после того как нам известны все скорости юзеров "в момент 9:00:03 утра", можно их складывать и находить соответные посекторные и т.д. средние (разумеется, складываем скорости юзеров "для одного и того же "момента", вычисленные с одним и тем же окном) для 9:00:03 утра.
Аналогично для следующего момента 9:00:04 утра (только теперь разумеется берем скорости всех юзеров, расчетенные для того же самого следующего момента 9:00:04 утра).

 [ Сообщений: 27 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group