Jump to content


Photo

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

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

  • Please log in to reply
1486 replies to this topic

#681 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 19 August 2017 - 22:34

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

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

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

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

Edited by vlad333000, 19 August 2017 - 22:37.

  • 0

#682 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 19 August 2017 - 23:21

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

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

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

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

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

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

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

 

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

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


Edited by Ilias, 20 August 2017 - 05:37.

  • 0

#683 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 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 posts

Posted 20 August 2017 - 04:01

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

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

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

)

 

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

 

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

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

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


Edited by Ilias, 20 August 2017 - 05:36.

  • 0

#685 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 20 August 2017 - 11:09

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

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

Edited by vlad333000, 20 August 2017 - 11:20.

  • 0

#686 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 20 August 2017 - 16:09

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

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

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

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

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


Edited by Ilias, 20 August 2017 - 16:12.

  • 0

#687 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 20 August 2017 - 18:04

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


  • 1

#688 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 20 August 2017 - 21:13

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

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

 

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

)


Edited by Ilias, 20 August 2017 - 21:41.

  • 0

#689 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 20 August 2017 - 21:23

 

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

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


  • 0

#690 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 20 August 2017 - 21:55

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


  • 0

#691 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 20 August 2017 - 22:20

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


Edited by Ilias, 20 August 2017 - 22:21.

  • 0

#692 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 20 August 2017 - 22:41

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

#693 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 20 August 2017 - 22:49

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

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

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


Edited by Ilias, 20 August 2017 - 23:34.

  • 0

#694 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 20 August 2017 - 23:43

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

#695 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 21 August 2017 - 00:00

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

 

 

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


  • 0

#696 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 21 August 2017 - 00:08

vlad333000

(

 

SteelRat

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

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

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


Edited by Ilias, 21 August 2017 - 00:10.

  • 0

#697 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 21 August 2017 - 16:55

vlad333000

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


Edited by Ilias, 21 August 2017 - 16:56.

  • 0

#698 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 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 posts

Posted 21 August 2017 - 21:23

vlad333000

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

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

 

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

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

 

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

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

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

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


Edited by Ilias, 21 August 2017 - 22:22.

  • 0

#700 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 21 August 2017 - 23:15

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

Edited by vlad333000, 21 August 2017 - 23:30.

  • 0




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