HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > организация данных
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



организация данных

есть, например, регулярное двумерное поле клеток. часть (до половины) областей клеток на поле не несут информации. как лучше организовать данные:
1)сделать одномерный массив с данными DATA[:] и двумерный массив индексов IND[:,:], и обращаться к данным по DATA[ IND[i,j] ]
2)или же, лучше сделать эту DATA[i,j] в виде массива указателей и просто не аллокатить место под пустые клетки?
интересует с точки зрения производительности. считается, что оба массива помещаются в кэш процессора.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | IP: Записан
Сообщение: 123715

Старое сообщение 03-08-2013 13:23
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



Если оба массива такие мелкие, что помещаются в кэш процессора первого уровня, не всё ли равно как их делать?
Вот если бы ты работал с массивами на миллионы терабайт, тогда был бы смысл что-то оптимизировать.
Лучше не занимайся вот этой ерундой:

Цитата:
thambs писал:
и просто не аллокатить место под пустые клетки?

на аллокациях много времени потеряешь.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 123718

Старое сообщение 03-08-2013 13:36
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Дядя Миша
аллокатить один раз.
>смысл что-то оптимизировать.
из него очень часть надо будет читать и писать в него. а вот в кеш какого уровня он помещается я не знаю. у меня на рабочем помпе cpuinfo просто выдаёт cache size 2MB. Ну я так понимаю, первый вариант проще будет, а скорость та же?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | IP: Записан
Сообщение: 123719

Старое сообщение 03-08-2013 13:41
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 123720

Старое сообщение 03-08-2013 14:39
-
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
на аллокациях много времени потеряешь.

Интересный факт - делал ради интереса свой аллокатор на предвыделенном большом куске памяти - до 60 раз быстрей чем malloc/free

__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов

Сообщить модератору | IP: Записан
Сообщение: 123721

Старое сообщение 03-08-2013 14:53
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
CrazyRussian писал:
делал ради интереса свой аллокатор на предвыделенном большом куске памяти - до 60 раз быстрей чем malloc/free

Свой аллокатор был в релизной дллке, а тестовая прога собиралась в дебаге?
Иначе 60-кратный прирост объяснить нельзя, имхо.
Цитата:
thambs писал:
есть, например, регулярное двумерное поле клеток. часть (до половины) областей клеток на поле не несут информации. как лучше организовать данные

Sparse BLAS смотрел?

__________________

Сообщить модератору | IP: Записан
Сообщение: 123722

Старое сообщение 03-08-2013 15:37
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



XaeroX
у меня не матрицы же. в сетке клеток храню значения потенциала, элмагн-полей и плотности зарядов. а пустые клетки получаются из за того что решаю всё не в прямоугольнике, а в некотором многограннике хитрой формы, который моделирует срез разрядной камеры ЭРД.
соответственно, для того что бы рассчитать поля, мне нужно сначала много раз пробегать по значениям потенциала и плотности -- итерационным методом верхней релаксации. для того что бы рассчитать смещение частиц под воздействием этого поля -- нужно побегать по массиву частиц (он заранее декомпозирован на блоки маленького размера и пространственно упорядочен), и для каждой частицы проинтерполировть значение поля из массива. поэтому хочу что бы массив с полями был как можно меньше и помещался в кэш, так как к нему обращаться придётся больше всего.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | IP: Записан
Сообщение: 123723

Старое сообщение 03-08-2013 15:55
- За что?
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Цитата:
XaeroX писал:
Свой аллокатор был в релизной дллке, а тестовая прога собиралась в дебаге?
Иначе 60-кратный прирост объяснить нельзя, имхо.

Да не, все в одном модуле, про прирост - то по сути сильно замудренный вариант кода типа такого:
C++ Source Code:
1
typedef struct object_s
2
{
3
  int field1;
4
  int field2;
5
}object_t;
6
 
7
object_t Pool[MAX_OBJECTS];
8
int UsedObjects = 0;
9
 
10
object_t * Alloc()
11
{
12
  return &Pool[UsedObjects++];
13
}

__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов

Сообщить модератору | IP: Записан
Сообщение: 123725

Старое сообщение 03-08-2013 17:29
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



Дак ты уже выделил память. Что ты сравниваешь-то?
Выделять выделенную память в 60 раз быстрее чем выделять невыделенную память?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 123726

Старое сообщение 03-08-2013 18:20
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


CrazyRussian
Какой же это аллокатор? Где функция Free(), например?

__________________

Сообщить модератору | IP: Записан
Сообщение: 123727

Старое сообщение 03-08-2013 18:25
-
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1088

Рейтинг



Когда взглянул на аллокатор Сразу Рашена, в мыслях пронеслось то же слово, что и у него сейчас в статусе под моим ником.

Насчёт оптимизации и неиспользуемых клеток - разве время считывания/записи будет как-то зависеть от размеров массива? Различия же только в способе вычисления индекса, вот и нужно найти тот, что побыстрее. Это если занимаемый объём памяти не так важен, иначе конечно компромисс надо искать.

Сообщить модератору | IP: Записан
Сообщение: 123728

Старое сообщение 03-08-2013 19:53
- За что?
pRoxxx
Житель форума

Дата регистрации: Jan 2011
Проживает: UA DP
Сообщений: 360
Возраст: 34

Рейтинг



Ну этот трюк который о котором выше писал СразуРашен используется на многих приставках, ибо там нельзя динамично выделять память. Вообще я когда то обсуждал эту тему с ДМом, он меня таки убедил что предвыделять таки не стоит. (=

Сообщить модератору | IP: Записан
Сообщение: 123729

Старое сообщение 03-08-2013 20:36
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
pRoxxx писал:
Ну этот трюк который о котором выше писал СразуРашен используется на многих приставках, ибо там нельзя динамично выделять память

И в виртуальной машинке третьей кваки
C++ Source Code:
1
#define POOLSIZE	(256 * 1024)
2
 
3
static char		memoryPool[POOLSIZE];
4
static int		allocPoint;
5
 
6
void *G_Alloc( int size ) {
7
  char	*p;
8
 
9
  if ( g_debugAlloc.integer ) {
10
    G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
11
  }
12
 
13
  if ( allocPoint + size > POOLSIZE ) {
14
    G_Error( "G_Alloc: failed on allocation of %i bytes\n", size ); // bk010103 - was %u, but is signed
15
    return NULL;
16
  }
17
 
18
  p = &memoryPool[allocPoint];
19
 
20
  allocPoint += ( size + 31 ) & ~31;
21
 
22
  return p;
23
}

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 123730

Старое сообщение 03-08-2013 20:42
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


CrazyRussian это называется не аллокатор, а мемори пул. А слабо написать аллокатор кусков памяти произвольной длины в 60 раз быстрее обычного и фрагментирующий память в минимальной степени?

Сообщить модератору | IP: Записан
Сообщение: 123731

Старое сообщение 03-08-2013 20:45
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
Government-Man писал:
аллокатор кусков памяти произвольной длины в 60 раз быстрее обычного

Отличная задачка для собеседования, я считаю.

__________________

Сообщить модератору | IP: Записан
Сообщение: 123732

Старое сообщение 03-08-2013 20:54
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 19:38. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > организация данных
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024