agentsclimarketplace

Cpp performance

Skill Mattakushi432/Claude-Code-Skills-Custom-DevTools-Pack/plugins/devtools-pack/skills/cpp-performance

When to activate: C++ performance, profiling, cache, SIMD, branch prediction, LTO, PGO, perf, vtune, benchmarking, optimizationFrom its SKILL.md

Install
npx -y skills add Mattakushi432/Claude-Code-Skills-Custom-DevTools-Pack --skill cpp-performance

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

3.7 KB, 978 tokens by cl100k_base, as published. Nobody here has run it

C++ Performance Patterns

Profiling Tools

# Linux perf — low overhead sampling
perf record -g ./app && perf report

# Valgrind/Callgrind — detailed call graph
valgrind --tool=callgrind ./app
kcachegrind callgrind.out.*

# Google Benchmark — microbenchmarks
# Intel VTune — hardware counter analysis (microarchitecture bottlenecks)
# Instruments (macOS) — sampling profiler with call tree

Google Benchmark Micro-benchmarks

#include <benchmark/benchmark.h>

static void BM_VectorSum(benchmark::State& state) {
    std::vector<int> v(state.range(0));
    std::iota(v.begin(), v.end(), 0);
    for (auto _ : state) {
        benchmark::DoNotOptimize(std::reduce(v.begin(), v.end()));
    }
    state.SetItemsProcessed(state.iterations() * state.range(0));
}
BENCHMARK(BM_VectorSum)->Range(64, 1 << 16);
BENCHMARK_MAIN();

Cache-Friendly Data Layouts

// BAD: Array of Structs (AoS) — poor spatial locality for partial access
struct Particle { float x, y, z, vx, vy, vz, mass; };
std::vector<Particle> particles(N);

// GOOD: Struct of Arrays (SoA) — vectorizer-friendly
struct Particles {
    std::vector<float> x, y, z, vx, vy, vz, mass;
};

// Hot/cold data split — keep frequently accessed data together
struct Entity {
    // Hot data (accessed every frame)
    float x, y, z;
    uint32_t flags;
    // Cold data (accessed rarely) — store separately or via pointer
    std::string name;
    std::vector<std::string> tags;
};

SIMD Intrinsics (x86)

#include <immintrin.h>

// AVX2: process 8 floats at once
void add_arrays(const float* a, const float* b, float* out, int n) {
    int i = 0;
    for (; i <= n - 8; i += 8) {
        __m256 va = _mm256_loadu_ps(a + i);
        __m256 vb = _mm256_loadu_ps(b + i);
        _mm256_storeu_ps(out + i, _mm256_add_ps(va, vb));
    }
    for (; i < n; ++i) out[i] = a[i] + b[i];  // scalar remainder
}
// Prefer auto-vectorization first; use intrinsics only when profiling shows need

Compiler Flags for Performance

# Release build flags
target_compile_options(myapp PRIVATE
    -O3                    # aggressive optimization
    -march=native          # target current CPU (AVX2, etc.)
    -flto                  # Link-Time Optimization
    -fno-exceptions        # if exceptions not used
    -fno-rtti              # if RTTI not used
)

# Profile-Guided Optimization (PGO)
# Step 1: Instrument build
# -fprofile-generate
# Step 2: Run with representative workload
# Step 3: Optimize with profile
# -fprofile-use

Branch Prediction Hints

// C++20 [[likely]] / [[unlikely]]
if (ptr == nullptr) [[unlikely]] {
    handle_error();
    return;
}
// Hot path continues here

// Avoid branch misprediction in tight loops
// BAD: branch inside loop
for (int i = 0; i < N; ++i)
    if (data[i] > 0) sum += data[i];

// BETTER: branchless
for (int i = 0; i < N; ++i)
    sum += data[i] * (data[i] > 0);

Move Semantics and RVO

// Return Value Optimization (RVO) — compiler elides copy automatically
std::vector<int> make_data(int n) {
    std::vector<int> v(n);
    std::iota(v.begin(), v.end(), 0);
    return v;  // NRVO — no copy
}

// Pass sink arguments by value (enables move)
class Builder {
    std::string name_;
public:
    Builder& set_name(std::string name) {
        name_ = std::move(name);  // move if caller passes rvalue
        return *this;
    }
};

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,852. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.