Skip to content

Instantly share code, notes, and snippets.

@SC-One
Last active January 31, 2023 12:24
Show Gist options
  • Save SC-One/328f3b0e6d75b5454d18b7e9bbda45fd to your computer and use it in GitHub Desktop.
Save SC-One/328f3b0e6d75b5454d18b7e9bbda45fd to your computer and use it in GitHub Desktop.
Benchmark alignas , packed on variables
//////// demo online: https://quick-bench.com/q/TYcfwD0khRpbE53rn8cRtn7nmvA
#include <vector>
#include <cstddef>
static constexpr auto totalVecSize = 99'999;
struct __attribute__ ((packed)) AAA_packed {
int a;
char b;
float c;
char d;
float e;
double f[3];
};
struct AAA {
int a;
char b;
float c;
char d;
float e;
double f[3];
};
static void packedMove(benchmark::State& state) {
using DefaltType = AAA_packed;
for (auto _ : state) {
std::vector<DefaltType> vec;
for(std::size_t i=0;i<totalVecSize;++i)
{
DefaltType tmp;
benchmark::DoNotOptimize(tmp);
vec.push_back(tmp);
}
benchmark::DoNotOptimize(vec);
}
}
BENCHMARK(packedMove);
static void normalMove(benchmark::State& state) {
using DefaltType = AAA;
for (auto _ : state) {
std::vector<DefaltType> vec;
for(std::size_t i=0;i<totalVecSize;++i)
{
DefaltType tmp;
benchmark::DoNotOptimize(tmp);
vec.push_back(tmp);
}
benchmark::DoNotOptimize(vec);
}
}
BENCHMARK(normalMove);
static void alignAsPackedMove(benchmark::State& state) {
using DefaltType = AAA_packed;
for (auto _ : state) {
std::vector<DefaltType> vec;
for(std::size_t i=0;i<totalVecSize;++i)
{
alignas(alignof(DefaltType)) DefaltType tmp;
benchmark::DoNotOptimize(tmp);
vec.push_back(tmp);
}
benchmark::DoNotOptimize(vec);
}
}
BENCHMARK(alignAsPackedMove);
static void alignAsNormalMove(benchmark::State& state) {
using DefaltType = AAA;
for (auto _ : state) {
std::vector<DefaltType> vec;
for(std::size_t i=0;i<totalVecSize;++i)
{
alignas(alignof(DefaltType)) DefaltType tmp;
benchmark::DoNotOptimize(tmp);
vec.push_back(tmp);
}
benchmark::DoNotOptimize(vec);
}
}
BENCHMARK(alignAsNormalMove);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment