Summary
cost_model.cpp hardcodes l3_bytes_per_ccd = 33554432 (32 MB) when the detected
L3 size is 0, so every blocking decision on a CPU without L3 is made against 32 MB
of cache that does not exist. AMD family 15h parts have no L3 at all.
Suggested fix
Fall back to the detected L2 size rather than a fixed constant.
Reference branch: https://github.com/lwandrebeck/BullDNN/tree/upstream/cost-model-phantom-l3
Related, not fixed here
The threading policy is written around Zen topology. On family 15h the FPU is
shared between the two cores of a module (AMD publication 47414), so FP throughput
tracks module count rather than core count: measured 1.96x going from 1 to 4
threads on a 4-core / 2-module part, against a 66.8 GFLOPS peak that is ~75% of
that part's 89.6 GFLOPS theoretical maximum. threads_sharing_l3 cannot express
that relationship.
Summary
cost_model.cpphardcodesl3_bytes_per_ccd = 33554432(32 MB) when the detectedL3 size is 0, so every blocking decision on a CPU without L3 is made against 32 MB
of cache that does not exist. AMD family 15h parts have no L3 at all.
Suggested fix
Fall back to the detected L2 size rather than a fixed constant.
Reference branch: https://github.com/lwandrebeck/BullDNN/tree/upstream/cost-model-phantom-l3
Related, not fixed here
The threading policy is written around Zen topology. On family 15h the FPU is
shared between the two cores of a module (AMD publication 47414), so FP throughput
tracks module count rather than core count: measured 1.96x going from 1 to 4
threads on a 4-core / 2-module part, against a 66.8 GFLOPS peak that is ~75% of
that part's 89.6 GFLOPS theoretical maximum.
threads_sharing_l3cannot expressthat relationship.