Skip to content

Commit

Permalink
[libc][benchmark] Fix wrong BatchSize leading to data not fitting in L1.
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D138111
  • Loading branch information
gchatelet committed Nov 16, 2022
1 parent c9f0a3e commit 2a6d4c5
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions libc/benchmarks/LibcMemoryBenchmark.cpp
Expand Up @@ -72,18 +72,27 @@ static size_t getL1DataCacheSize() {
report_fatal_error("Unable to read L1 Cache Data Size");
}

static constexpr int64_t KiB = 1024;
static constexpr int64_t ParameterStorageBytes = 4 * KiB;
static constexpr int64_t L1LeftAsideBytes = 1 * KiB;

static size_t getAvailableBufferSize() {
static constexpr int64_t KiB = 1024;
static constexpr int64_t ParameterStorageBytes = 4 * KiB;
static constexpr int64_t L1LeftAsideBytes = 1 * KiB;
return getL1DataCacheSize() - L1LeftAsideBytes - ParameterStorageBytes;
}

ParameterBatch::ParameterBatch(size_t BufferCount)
: BufferSize(getAvailableBufferSize() / BufferCount),
BatchSize(BufferSize / sizeof(ParameterType)), Parameters(BatchSize) {
BatchSize(ParameterStorageBytes / sizeof(ParameterType)),
Parameters(BatchSize) {
if (BufferSize <= 0 || BatchSize < 100)
report_fatal_error("Not enough L1 cache");
const size_t ParameterBytes = Parameters.size() * sizeof(ParameterType);
const size_t BufferBytes = BufferSize * BufferCount;
if (ParameterBytes + BufferBytes + L1LeftAsideBytes > getL1DataCacheSize())
report_fatal_error(
"We're splitting a buffer of the size of the L1 cache between a data "
"buffer and a benchmark parameters buffer, so by construction the "
"total should not exceed the size of the L1 cache");
}

size_t ParameterBatch::getBatchBytes() const {
Expand Down

0 comments on commit 2a6d4c5

Please sign in to comment.