powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / как отменить выравнивание переменных по ширине процессорного слова
25 сообщений из 25, страница 1 из 1
как отменить выравнивание переменных по ширине процессорного слова
    #38871041
nagisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано - СИ + Linux 64bit, большие массивы в оперативке

как отменить выравнивание переменных по ширине процессорного слова ?
те объявляешь uint8_t, а физически один фиг - 8 байт выделяется

хочу протестировать на сколько упадет скорость при работе без выравнивания
те оценить что выгоднее - наращивать оперативку или на сколько-то потерять в производительности
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871049
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
#pragma pack
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871060
nagisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

автор#pragma pack

это уже пробовал - не помогает
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871065
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisa,

Код: plaintext
1.
2.
3.
4.
struct S {
    uint8_t v1;
    uint64_t v2;
} __attribute__((packed));



PS. Код давайте. Никто гадать не будет почему у вас там "не помогает".
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871069
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще так
Код: plaintext
1.
2.
3.
4.
struct S {
    uint8_t v1;
    uint64_t v2  __attribute__((packed));
};
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871076
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisaхочу протестировать на сколько упадет скорость при работе без выравнивания
-fpack-struct ключ компилятору задайте

PS компилятор и его версию не скрывайте :)
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871113
nagisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#pragma pack(0)

#include "ocilib.h"
#include <stdint.h>
#include "dynarray.h"

#define OraInt   uint32_t 
#define OraChar  uint8_t 

typedef struct 
{
	OraInt idtn;
	OraInt stop_object_up;
	OraInt stop_object_dn;
}  __attribute__((packed))  DBTypeObject;



компилируется
gcc -std=c99 -O2 итд

# gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
....
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871130
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisa,
и чего вы в этом примере ожидаете от изменения выравнивания?
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871135
nagisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barlone,

cмотрите внимательно - платформа 64х битная
те выделяется всегда 8 байт на любую переменную вне зависимости - uint8_t , uint32_t или uint64_t

2Изопропил
-fpack-struc
тоже никакого изменения
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871138
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisa,

переменных так много что ли?

ну сгруппируйте в упакованную структуру для экспериментов
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871141
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья про выравнивание в структурах http://habrahabr.ru/post/142662/
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871155
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisacмотрите внимательно - платформа 64х битная
те выделяется всегда 8 байт на любую переменную вне зависимости - uint8_t , uint32_t или uint64_t

2Изопропил
-fpack-struc
тоже никакого изменения
А как вы определяете что нет изменений?
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871214
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisaДано - СИ + Linux 64bit, большие массивы в оперативке

как отменить выравнивание переменных по ширине процессорного слова ?
те объявляешь uint8_t, а физически один фиг - 8 байт выделяется

хочу протестировать на сколько упадет скорость при работе без выравнивания
те оценить что выгоднее - наращивать оперативку или на сколько-то потерять в производительности
Для сериализации в бинарь лучше использовать не упакованные структуры
а специальные стандарты типа EBML. По сути это попытка привести к общему
знаменателю различные encodings, packages и *endians.
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871356
nihao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nagisaBarlone,

cмотрите внимательно - платформа 64х битная
те выделяется всегда 8 байт на любую переменную вне зависимости - uint8_t , uint32_t или uint64_t

2Изопропил
-fpack-struc
тоже никакого изменения

Что за бред? Придумают несуществующие проблемы и решают их потом. Выравнивание это методика доступа к памяти, когда доступ к набору байтов осуществляется по _адресу_ кратному _размеру этого набора_. Попробуйте

Код: plaintext
1.
2.
3.
4.
#include <stdio.h>
#include <stdint.h>
struct s { uint8_t m1; uint8_t m2; };
int main(int argc, char ** argv) { printf("%d\n", sizeof(struct s)); }
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871527
nagisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovskynagisacмотрите внимательно - платформа 64х битная
те выделяется всегда 8 байт на любую переменную вне зависимости - uint8_t , uint32_t или uint64_t

2Изопропил
-fpack-struc
тоже никакого изменения
А как вы определяете что нет изменений?
top

короче статья на хабре в тему, а еще оказалось эффективно замучать разработчика кода и таки найти баг в коде,
который порождал такое выделение оперативки (2.4GB), что реальная разница в 50 мег показалась ошибкой измерения
хотя как раз это и была разница между 32/64 бит int
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871538
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisaреальная разница в 50 мег показалась ошибкой измерения хотя как раз это и
была разница между 32/64 бит int
10 миллионов переменных в программе... Ух ты!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871540
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

утечка, наверное, или realloc'ами развлекаются.
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871584
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выравнивать надо те данные которые сидят в HighLoad. Буферные кеши
там всякие.
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871608
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВыравнивать надо те данные которые сидят в HighLoad. Буферные кеши
там всякие.
Не совсем.
Иногда надо выравнивать не для оптимизации, а потому что процессор не умеет/не разрешает по-другому (всякие ARMы, да и Интелы тоже имеют такой режим).
Хотя само по себе то что процессор не поддерживает невыравненный доступ - это тоже оптимизация ))
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871625
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nagisaДано - СИ + Linux 64bit, большие массивы в оперативке

как отменить выравнивание переменных по ширине процессорного слова ?
те объявляешь uint8_t, а физически один фиг - 8 байт выделяется

хочу протестировать на сколько упадет скорость при работе без выравнивания
те оценить что выгоднее - наращивать оперативку или на сколько-то потерять в производительности

Ребята, я конечно может совсем из ума выжил, но на сколько я понял, автор утверждает,
что в массиве unsigned char байтики будут выровнены на границу 8-и (или 4-рёх, не важно) байтового слова.
Это в С-шной программе.

Это как-то уже совсем бредом попахивает. Ни одна из libc функций так не будет работать.

Автор, давай код, давай результаты тестов.
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871628
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВыравнивать надо те данные которые сидят в HighLoad. Буферные кеши
там всякие.

Ребята, выравниваются объекты, размер которых более одного байта.
Массив из char-ов выравниваться не будет нигде -- как тогда с памятью -то вообще работать ?
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871640
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМассив из char-ов выравниваться не будет нигде
Ты эта... Не путай выравнивание элементов массива и выравнивание самого массива. Аффтар же
талдычит про выравнивание отдельных переменных. Очевидно - локальных. Он ещё, видимо, не
слышал про stack frames и прочую защиту от дураков.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871659
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivМассив из char-ов выравниваться не будет нигде
Ты эта... Не путай выравнивание элементов массива и выравнивание самого массива. Аффтар же
талдычит про выравнивание отдельных переменных. Очевидно - локальных. Он ещё, видимо, не
слышал про stack frames и прочую защиту от дураков.


Извини, но сколько можно потерять на выравнивании одной переменной ?
2-8 байт?
Сколько же у него переменных должно быть, чтобы проиграть ?

Ну в общем, бред какой-то.
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871662
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСколько же у него переменных должно быть, чтобы проиграть ?

Я же сказал чуть повыше: более десяти миллионов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как отменить выравнивание переменных по ширине процессорного слова
    #38871721
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак я и говорю. Буферный блок (обычно содержит шапку). Структура. В понимании нашего
топик-стартера. Вот ее и надо выравнивать. А она полюбому содержит идентификаторы.
Указатели на соседние блоки, счётчики и сетку атрибутов.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / как отменить выравнивание переменных по ширине процессорного слова
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]