Статья: Память или производительность. Чему отдать предпочтение?

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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.