4
ПАМЯТЬ ИЛИ ПРОИЗВОДИТЕЛЬНОСТЬ. ЧЕМУ ОТДАТЬ ПРЕДПОЧТЕНИЕ?
Новиков А.П., Горовенко Л.А.
Армавирский механико-технологический
институт (филиал) ФГБОУ ВПО
"Кубанский государственный технологический университет"
Армавир, Россия
Зачастую перед теми, кто занимается программированием в сфере игровых модификаций встает вопрос: Как стоит строить код: максимально производительно, или максимально экономично в отношении памяти.
Большинство программистов решит, что нужно искать компромисс. Но что делать в тех случаях, когда компромисс найти тяжело, либо вообще невозможно? Искать!
Допустим, нам нужно иметь в памяти 1000 ячеек содержащих двоичный ноль или единицу. 1000 целочисленных переменных (int) займет в памяти 1.95 Мб, в то время как 1000 переменных логического типа (bool) займет в памяти примерно 490 Кб. Этот метод перехода от использования одного типа данных к использованию другого приводит к экономии трёх четвертей используемой памяти. Неплохо! Но, тут же возникает вопрос, а можно ли сэкономить ещё больше?
Проведённые нами эксперименты по преобразованию компьютерного программного кода привели нас к ещё более мощному способу оптимизации памяти: хранение данных в ячейках, пользуясь ими через побитовый сдвиг.
В этом случае, на 1000 переменных мы потратим порядка 80 Кб оперативной памяти, что почти в 25 раз меньше, по сравнению с той же тысячью целочисленных переменных типа int.
Результаты проведённого сравнительного анализа представлены в таблице 1.
Таблица 1 Сравнительные анализ количества переменных различного
типа на фиксированный объём оперативной памяти
|
Фиксированный объём памяти |
1 |
950 кб = 1.95 мб |
||
|
Тип переменной |
int |
bool |
bit's |
|
|
Количество переменных |
1000 |
4000 |
> 24 000 |
В качестве эксперимента, каждый вид переменных был записан, использован и перезаписан 10 000 раз с целью определения скорости работы программы, реализующей одну и ту же задачу посредством использования различных типов переменных. Результаты эксперимента представлены в таблице 2:
Таблица 2 Результаты эксперимента
|
Тип данных |
int |
bool |
bit's |
|
|
Время (усл.ед.) |
~190 |
~170 |
~240 |
Как показал эксперимент, bit-овые переменные оказались «медленнее» остальных. Почему? Потому, что для выполнения побитовых операций генерируются дополнительные инструкции в секции кода, которые идут параллельно с нашими bit-ами. А, как известно, любая операция в той или иной степени «загружает» машину, что, естественно, сказывается на её быстродействии. Проведённый нами эксперимент показал также, что не все программные двигатели имеют многопоточность и выполняют все операции последовательно.
Приведём фрагменты программного кода, иллюстрирующие проведённое нами исследование.
Итак, создаем:
#define MAX_USERS (1000)
enum Bits:(<<= 1) //не забываем, не более 32
{
EnumOne = 1,
EnumTwo, ...
};
new Bits:UserBits[MAX_USERS];
Узнаем значение и обнуляем весь массив пользователя:
UserBits[userid] &EnumOne;
UserBits[userid] = Bits:0;
Устанавливаем ячейке значение 1 (true)
UserBits[userid] |= EnumOne;
Устанавливаем ячейке значение 0 (false)
UserBits[userid] &= ~EnumOne;
Меняем значение в ячейке (при 0 ставим 1, и наоборот)
UserBits[userid] ^= EnumOne;
программный код производительность память
Список литературы:
1.Горовенко Л.А. Логическое программирование и искусственный интеллект // Научный потенциал вуза производству и образованию. Сборник трудов научно-практической конференции профессорского-преподавательского состава Армавирского механико-технологического института (филиала) ГОУ ВПО "Кубанский Государственный технологический университет". Том. 2. - Армавир: Издательство АФЭИ, 2005. - С. 303- 304.
2.Шарнова В.А., Горовенко Л.А. Технология применения методов комбинаторного анализа в играх с угадыванием числа // Электронный журнал «Международный студенческий научный вестник»: Типография ИД «Академия Естествознания», - Саратов, 2015. - № 5. Ч4. - С. 586-587. 3. Горовенко Л.А., Манин М.П. Применение математического аппарата методов оптимизации в задачах моделирования электросбережения // Сборник докладов, отмеченных наградами ХХI научной конференции студентов и аспирантов АМТИ, посвященной 70-летию Победы в Великой Отечественной войне. Армавир: ООО «Редакция газеты «Армавирский собеседник», подразделение Армавирская типография», 2015. - С. 88 - 92.