Перейти к содержимому


Фотография

Вопросы по скриптингу

Arma3 как плотформа для созда Скритпы

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1486

#681 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 19 August 2017 - 22:34

сейчас arma использует 51 CPU поток

Сначала назовите мне ЦП с таким числом потоков

поддержку многоядерности вставили, и 'многопоточность'

Мой i5 с 4 ядрами на 50% простаивает, а 3 и 4 ядро заняты только фоновыми задачами. Или вы называете "добавили" - наличие пункта кол-во ядер и потоков в Лаунчере?

Сообщение отредактировал vlad333000: 19 August 2017 - 22:37

  • 0

#682 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 19 August 2017 - 23:21

Сначала назовите мне ЦП с таким числом потоков

Какое по вашему отношение количество потоков имеет к возможностям CPU ?

Мой i5 с 4 ядрами на 50% простаивает, а 3 и 4 ядро заняты только фоновыми задачами. Или вы называете "добавили" - наличие пункта кол-во ядер и потоков в Лаунчере?

У меня на i7 по ~10% на ядро, почти идеально ровно, проверьте свои 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

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

(у меня минимум на 80% "простаивает", в этом и проблема)

 

(заметка: "system" |windows 10|'а работает в ~270 потоках,

суть не в количестве созданных для игры потоков, а в том чтобы все скриптовые команды arma'ы не выполнялись в недостаточном их количестве)


Сообщение отредактировал Ilias: 20 August 2017 - 05:37

  • 0

#683 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 20 August 2017 - 01:16

(заметка: "system" |windows 10|'а работает в ~270 потоках,

ОС работает в столько потоков только потому что это очень комплексная система с сотнями служб и других мелкий программ

проверьте свои startup parameters(не большой шанс)

Вот поверьте за 2+к часов все проверено по 10 раз и даже испробованы безумные и бредовые настройки

У меня на i7 по ~10% на ядро

А вы довольны? Т. е. у вас овер дофига ФПС, все быстро выполняется?

посмотрите в интернете типы ядер на вашем процессоре, раньше интел компоновали процессоры из разных ядер (ядра под разные задачи)

Откуда такая инфа? Ни разу про intel ничего подобного не слышал, в отличии от AMD с 999+ ядер в одном процессоре которые максимум калькулятор потянут. Да и в других играх в отличии от Армы он нормально загружен и выдает приличную для себя производительность

Какое по вашему отношение количество потоков имеет к возможностям CPU ?

Максимальная производительность будет только тогда когда число поток совпадет с числом ядер (Или потоков самого ЦП), в меньшем случае будет идти излишние не задействованные ресурсы, в большем ОС или иная ответственная за это система будет слишком часто менять потоки для одного ядра тем самым каждый поток в отдельности получит значительно меньше ресурсов, да и процесс смены потока это не одна операция на ассемблере
  • 0

#684 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 20 August 2017 - 04:01

ОС работает в столько потоков только потому что это очень комплексная система с сотнями служб и других мелкий программ

я и не удивлялся ничему, просто заметил

Вот поверьте за 2+к часов все проверено по 10 раз и даже испробованы безумные и бредовые настройки

)

 

А вы довольны? Т. е. у вас овер дофига ФПС, все быстро выполняется? 

Вы вообще  помните в чём проблема ?, этот пост полностью прочитали ?

(если это шутка, извините до меня такое не доходит)

Откуда такая инфа? Ни разу про intel ничего подобного не слышал, в отличии от AMD с 999+ ядер в одном процессоре которые максимум калькулятор потянут. Да и в других играх в отличии от Армы он нормально загружен и выдает приличную для себя производительность 

Где то на википедии, извините сейчас не буду искать, просто проверьте одинаковый ли тип у всех ваших ядер

Максимальная производительность будет только тогда когда число поток совпадет с числом ядер (Или потоков самого ЦП), в меньшем случае будет идти излишние не задействованные ресурсы, в большем ОС или иная ответственная за это система будет слишком часто менять потоки для одного ядра тем самым каждый поток в отдельности получит значительно меньше ресурсов, да и процесс смены потока это не одна операция на ассемблере

Я имел ввиду другое (сами прочтите свой пост на который это было ответом:"Сначала назовите мне ЦП с таким числом потоков"(разумеется всё время я имел ввиду потоки OS))

 

(по вашей идее "потоков"("потоков вычислений"))

 

Вы упустили одну крайне заметную деталь, причину явности проблемы с использованием CPU ресурсов армой:

_ да похоже все скриптовые команды выполняются в одном потоке (то есть используя один поток вычислений), но:

__ при увеличении количества обрабатываемых команд в игре-- ни на один из потоков вычислений нагрузка выше определнного уровня (у меня ~22%) не увеличивается,

потому что: по какой либо причине, плотность задач в потоке для обработки действий скриптовых команд сформированном армой при попадания в процессор ограниченна и мала;,

(время простоя между вычислениями соотноситься со временем работы, так получается значение загрузки)

так что: это можно исправить увеличением количества потоков на каждое ядро;,

 

("слишком часто менять потоки для одного ядра тем самым каждый поток в отдельности получит значительно меньше ресурсов"

меньше чем ему нужно -ресурсов любой поток начнёт получать только если ядро будет загружаться больше чем на  доступный маскимум -(минус) % загрузки от 1 потока с той же плотностью задач),

так что: только после увлечения количества потоков пока CPU не загрузиться до заданного лимитом значения можно будет определить максимальное до уменьшения производительности значение количества потоков на вычислительный потоков,


Сообщение отредактировал Ilias: 20 August 2017 - 05:36

  • 0

#685 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 20 August 2017 - 11:09

Ilias, всю википедию про интел прочитал - ничего подобного не нашел, зато нашел то, что на AMD за такое ухищрение подавали в суд

PS Делайте что хотите, они багтрекер читают раз в год, после выпуска DLC для отлова багов, и никогда не сделают ничего подобного (По крайней мере для А3) и все равно нужно автоматическое распределение по потокам, а не ручное как вы предлагаете

Сообщение отредактировал vlad333000: 20 August 2017 - 11:20

  • 0

#686 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 20 August 2017 - 16:09

Ilias, всю википедию про интел прочитал - ничего подобного не нашел, зато нашел то, что на AMD за такое ухищрение подавали в суд

Не про инел, посмотрите про процессоры,части процессоров (не на основной странице про CPU)

PS Делайте что хотите, они багтрекер читают раз в год, после выпуска DLC для отлова багов, и никогда не сделают ничего подобного (По крайней мере для А3) и все равно нужно автоматическое распределение по потокам, а не ручное как вы предлагаете

Ну с таким упрощением от меня (описано  всё и где  нужно  добавить, изменить (переписываю suggestion))

(" "и спасибо за вдохновение" ")


Сообщение отредактировал Ilias: 20 August 2017 - 16:12

  • 0

#687 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 August 2017 - 18:04

Что бы не парить себе мозг излишними сложностями БЕСы и придумали безголового клиента который по факту и реализует собой отдельный - дополнительный процесс исполнения. По сути, если подойти к реализации творчески и с умом, можете так нагрузить ваш 4-6-8 ядер процессор работой, что он подавится).


  • 1

#688 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 20 August 2017 - 21:13

Что бы не парить себе мозг излишними сложностями БЕСы и придумали безголового клиента который по факту и реализует собой отдельный - дополнительный процесс исполнения. По сути, если подойти к реализации творчески и с умом, можете так нагрузить ваш 4-6-8 ядер процессор работой, что он подавится).исполнения. По сути, если подойти к реализации творчески и с умом, можете так нагрузить ваш 4-6-8 ядер процессор работой, что он подавится).

Это типо того, но пассинг информации медленнее и нужна отдельная инстанция движка для каждого потока (ещё не уверен что все нужные команды есть)

 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

)


Сообщение отредактировал Ilias: 20 August 2017 - 21:41

  • 0

#689 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 August 2017 - 21:23

 

Это типо того, но пассинг информации медленнее, и перебор с лишним для настройки (ещё не уверен что все нужные команды есть)

Сурдоперевод в студию!)


  • 0

#690 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 20 August 2017 - 21:55

vlad333000 (не хочу терять возможность доступа к такой памяти из "separate threads")


  • 0

#691 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 20 August 2017 - 22:20

(в C нет какого нибудь пути маркировки памяти перед перезаписью (RV ведь работает на C ?) ? )


Сообщение отредактировал Ilias: 20 August 2017 - 22:21

  • 0

#692 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 20 August 2017 - 22:41

Ilias, C это ассемблер высокого уровня, как напишешь, так и будет
  • 0

#693 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 20 August 2017 - 22:49

Ilias, C это ассемблер высокого уровня, как напишешь, так и будет

я имею ввиду, (не через создание системы через C (которая будет контролировать например очерёдность доступа)),

а например: какой нибудь низкоуровневой |операции||принципа по которому| автоматически подобные ситуации будут решаться например: ожиданием read задачи пока write не выполниться


Сообщение отредактировал Ilias: 20 August 2017 - 23:34

  • 0

#694 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 20 August 2017 - 23:43

Ilias, нет конечно
  • 0

#695 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 21 August 2017 - 00:00

RV ведь работает на C

 

 

Да пусть работает хоть на нефти, Богемия интерактив раздаёт на лево и на право исходный код своего творения или на худой конец API через который можно изнасиловать реал виртуалити с помощью плагина?


  • 0

#696 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 21 August 2017 - 00:08

vlad333000

(

 

SteelRat

вопрос к тому чтобы знать возможности для использования при изменении

(был бы признателен за чуть более приятный к чтению текст

(не нужно сносок на мой, я сказал "приятнее" а не "легче"))


Сообщение отредактировал Ilias: 21 August 2017 - 00:10

  • 0

#697 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 21 August 2017 - 16:55

vlad333000

Не подскажете: при выполнении скомпилированной SQF команды на перезапись ячейки памяти в блоке управления процессора появляется команда на перезапись с данными для операции и блок управления отсылает сигнал на RAM, потом получая ответ перенаправляет его к следующему действию (не затрагивая АЛУ) ?


Сообщение отредактировал Ilias: 21 August 2017 - 16:56

  • 0

#698 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 21 August 2017 - 17:02

Если я вообще правильно понял весь разговор выше, то вы желаете контролировать изменение значений переменных, из кода который исполняется в планируемой среде исполнения кода, ну это если я правильно понял.
То есть, вы желаете иметь возможность модифицировать значения глобальных переменных из кода который вызван методом spawn например, и этих алгоритмов работающих с одной и той же переменной может быть несколько,
и вам требуется создать очередь из этих алгоритмов, но по вашему усмотрению, а не как решит планировщик армы.

#define PROCESS_0 0
#define PROCESS_1 1
#define PROCESS_2 2

Var_Name = [PROCESS_0 /*marker*/, 0/*value*/];

0 spawn {
	if (Var_Name select 0 == PROCESS_0) then {
		// code
		Var_Name set [1, (Var_Name select 1) + PROCESS_0];		
		Var_Name set [0, PROCESS_1];
	};
};

0 spawn {
	if (Var_Name select 0 == PROCESS_1) then {
		// code
		Var_Name set [1, (Var_Name select 1) + PROCESS_1];		
		Var_Name set [0, PROCESS_2];
	};
};

0 spawn {
	if (Var_Name select 0 == PROCESS_2) then {
		// code
		Var_Name set [1, (Var_Name select 1) + PROCESS_2];		
		Var_Name set [0, PROCESS_0];
	};
};

  • 0

#699 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 сообщений

Отправлено 21 August 2017 - 21:23

vlad333000

Не подскажете: при выполнении скомпилированной SQF команды на перезапись ячейки памяти в блоке управления процессора появляется команда на перезапись с данными для операции и блок управления отсылает сигнал на RAM, потом получая ответ перенаправляет его к следующему действию (не затрагивая АЛУ) ?

Кажется сглупил не много, АЛУ используется в данной ситуации при преобразовании поступившей команды в сигнал для RAM ?

 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

  • Выполнение команды. АЛУ выполняет указанную в команде операцию, сохраняет полученный результат в заданном месте и обновляет состояние флагов, по значению которых программа может судить о результате выполнения команды.

 

(надеюсь вы привели SQF в пример, для объяснения, и понимаете что речь о немного более низком уровне программного функционирования чем скриптинг на SQF)

Да, это флагирование (помечание ячеек памяти для разрешения к ним одновременного доступа только 1 процессу),

но ищу другие варианты, с лучшей производительностью

(этот принцип в этой ситуации может быть использован в виде разрешения доступа ко всей "shared memory" процессам на разных потоках по одному, хочу убрать необходимость каждому ждать пока другие в очереди получат доступ если им нужен доступ к разным ячейкам памяти)


Сообщение отредактировал Ilias: 21 August 2017 - 22:22

  • 0

#700 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 21 August 2017 - 23:15

Ilias, АЛУ не выполняет вообще ни каких операция с любым другим устройством, которое находится вне процессора. Он имеет доступ только к регистрам общего и специального назначения (Около 4-32 штук в целом на весь процессор), все операции (Арифметические и логические - поэтому оно и называется Арифметико-Логическое Устройство) проводятся исключительно в них. А вот всеми другими устройствами уже управляет "Устройство управления ЭВМ", которое по запрошенной команде или результату расположеному в регистре уже раскидывает сигналы и на ОЗУ, и на Жесткий диск и даже на сам АЛУ (Без этого устройства этот калькулятор вообще ничего не сделает)
Если нужен одновременный доступ на чтение и на запись, то тут нужно либо делить время доступа, как написал SteelRat, либо создавать по копии нужных данных для каждого потока и раз в какое-то время их синхронизировать приостанавливая доступ всем потокам (Так обычно в вебе делается: у каждого пользователя хранится локальная копия данных, которые он изменяет, и раз в какое-то время эта копия обновляется с сервера с применением соответствующих алгоритмов разрешения конфликтных ситуаций)

Сообщение отредактировал vlad333000: 21 August 2017 - 23:30

  • 0




Яндекс.Метрика