Можно ли определить структуру, объекты которой всегда будут находиться в отдельных строках кэша
Я знаю, что вы можете выровнять переменные по строке кэша, например, с помощью атрибут ((align(64))) в ССАГПЗ. Однако я заинтересован в выравнивании (или вы можете назвать это заполнением) во время объявления структуры. Так, например, для следующей структуры я хочу попросить компилятор создать необходимое заполнение так, чтобы любой объект этой структуры всегда был выровнен по строке кэша.
typedef struct
{
int a;
int b;
// I want the compiler to create a padding here for cache alignment
} my_type;
2 ответа:
Да. Я не могу вспомнить, откуда у меня этот код. Я думаю, что это мог быть блог Херба Саттера:
#define CACHE_LINE_SIZE 64 // Intel Core 2 cache line size. template<typename T> struct CacheLineStorage { public: [[ align(CACHE_LINE_SIZE) ]] T data; private: char pad[ CACHE_LINE_SIZE > sizeof(T) ? CACHE_LINE_SIZE - sizeof(T) : 1 ]; };