mirror of https://github.com/google/gemma.cpp.git
Only temporarily enable spinning in threading benchmark
PiperOrigin-RevId: 727114863
This commit is contained in:
parent
06c70dccd9
commit
bdf5d25e97
|
|
@ -226,6 +226,8 @@ class NestedPools {
|
||||||
BoundedSlice cluster_slice = BoundedSlice(),
|
BoundedSlice cluster_slice = BoundedSlice(),
|
||||||
BoundedSlice lp_slice = BoundedSlice());
|
BoundedSlice lp_slice = BoundedSlice());
|
||||||
|
|
||||||
|
bool AllPinned() const { return all_pinned_; }
|
||||||
|
|
||||||
// Subject to `use_spinning`, enables spin waits with the goal of reducing the
|
// Subject to `use_spinning`, enables spin waits with the goal of reducing the
|
||||||
// latency of barrier synchronization. We only spin during Generate to avoid
|
// latency of barrier synchronization. We only spin during Generate to avoid
|
||||||
// wasting energy during long waits. If `use_spinning` is kDefault, we first
|
// wasting energy during long waits. If `use_spinning` is kDefault, we first
|
||||||
|
|
|
||||||
|
|
@ -276,16 +276,27 @@ TEST(ThreadingTest, BenchJoin) {
|
||||||
constexpr size_t kInputs = 1;
|
constexpr size_t kInputs = 1;
|
||||||
static hwy::FuncInput inputs[kInputs];
|
static hwy::FuncInput inputs[kInputs];
|
||||||
|
|
||||||
const auto measure = [&](hwy::ThreadPool& pool, const char* caption) {
|
const auto measure = [&](hwy::ThreadPool& pool, bool spin,
|
||||||
|
const char* caption) {
|
||||||
inputs[0] =
|
inputs[0] =
|
||||||
static_cast<hwy::FuncInput>(hwy::Unpredictable1() * pool.NumWorkers());
|
static_cast<hwy::FuncInput>(hwy::Unpredictable1() * pool.NumWorkers());
|
||||||
hwy::Result results[kInputs];
|
hwy::Result results[kInputs];
|
||||||
hwy::Params params;
|
hwy::Params params;
|
||||||
params.verbose = false;
|
params.verbose = false;
|
||||||
params.max_evals = kMaxEvals;
|
params.max_evals = kMaxEvals;
|
||||||
|
|
||||||
|
// Only spin for the duration of the benchmark to avoid wasting energy and
|
||||||
|
// interfering with the other pools.
|
||||||
|
if (spin) {
|
||||||
|
pool.SetWaitMode(hwy::PoolWaitMode::kSpin);
|
||||||
|
}
|
||||||
const size_t num_results =
|
const size_t num_results =
|
||||||
Measure(&ForkJoin, reinterpret_cast<const uint8_t*>(&pool), inputs,
|
Measure(&ForkJoin, reinterpret_cast<const uint8_t*>(&pool), inputs,
|
||||||
kInputs, results, params);
|
kInputs, results, params);
|
||||||
|
if (spin) {
|
||||||
|
pool.SetWaitMode(hwy::PoolWaitMode::kBlock);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < num_results; ++i) {
|
for (size_t i = 0; i < num_results; ++i) {
|
||||||
printf("%-20s: %5d: %6.2f us; MAD=%4.2f%%\n", caption,
|
printf("%-20s: %5d: %6.2f us; MAD=%4.2f%%\n", caption,
|
||||||
static_cast<int>(results[i].input),
|
static_cast<int>(results[i].input),
|
||||||
|
|
@ -303,20 +314,19 @@ TEST(ThreadingTest, BenchJoin) {
|
||||||
};
|
};
|
||||||
|
|
||||||
NestedPools pools(0);
|
NestedPools pools(0);
|
||||||
measure(pools.AllPackages(), "block packages");
|
measure(pools.AllPackages(), false, "block packages");
|
||||||
if (pools.AllClusters(0).NumWorkers() > 1) {
|
if (pools.AllClusters(0).NumWorkers() > 1) {
|
||||||
measure(pools.AllClusters(0), "block clusters");
|
measure(pools.AllClusters(0), false, "block clusters");
|
||||||
}
|
}
|
||||||
measure(pools.Cluster(0, 0), "block in_cluster");
|
measure(pools.Cluster(0, 0), false, "block in_cluster");
|
||||||
|
|
||||||
Tristate use_spinning = Tristate::kDefault;
|
if (pools.AllPinned()) {
|
||||||
pools.MaybeStartSpinning(use_spinning);
|
const bool kSpin = true;
|
||||||
if (use_spinning == Tristate::kTrue) {
|
measure(pools.AllPackages(), kSpin, "spin packages");
|
||||||
measure(pools.AllPackages(), "spin packages");
|
|
||||||
if (pools.AllClusters(0).NumWorkers() > 1) {
|
if (pools.AllClusters(0).NumWorkers() > 1) {
|
||||||
measure(pools.AllClusters(0), "spin clusters");
|
measure(pools.AllClusters(0), kSpin, "spin clusters");
|
||||||
}
|
}
|
||||||
measure(pools.Cluster(0, 0), "spin in_cluster");
|
measure(pools.Cluster(0, 0), kSpin, "spin in_cluster");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue