2424 * 这是一个便利函数,减少调用点的重复代码。
2525 */
2626inline auto defaultTensorCoreFallback () {
27- return [](const float * A, const float * B, float * C, int M, int K, int N,
28- cudaStream_t stream) {
27+ return [](const float *A, const float *B, float *C, int M, int K, int N, cudaStream_t stream) {
2928 launch_bank_conflict_free_sgemm<32 >(A, B, C, M, K, N, stream);
3029 };
3130}
@@ -42,15 +41,15 @@ inline auto defaultTensorCoreFallback() {
4241 */
4342class BenchmarkRunner {
4443 public:
45- explicit BenchmarkRunner (const BenchmarkConfig& config) : config_(config) {}
44+ explicit BenchmarkRunner (const BenchmarkConfig & config) : config_(config) {}
4645
4746 /* *
4847 * 运行所有配置的 benchmark
4948 */
5049 void runAll () {
5150 printHeader ();
5251
53- for (const auto & [M, K, N] : config_.dimensions ) {
52+ for (const auto & [M, K, N] : config_.dimensions ) {
5453 runBenchmarks (M, K, N);
5554 }
5655
@@ -125,41 +124,41 @@ class BenchmarkRunner {
125124 benchmark.exportRooflineData (filename);
126125 }
127126
128- void runStandardKernels (SGEMMBenchmark& benchmark, int M, int K, int N) {
127+ void runStandardKernels (SGEMMBenchmark & benchmark, int M, int K, int N) {
129128 printf (" Running Naive SGEMM...\n " );
130129 benchmark.run (
131130 " Naive" ,
132- [](const float * A, const float * B, float * C, int M, int K, int N) {
131+ [](const float * A, const float * B, float * C, int M, int K, int N) {
133132 launch_naive_sgemm<32 >(A, B, C, M, K, N);
134133 },
135134 M, K, N, config_.warmup_runs , config_.benchmark_runs , kStandardVerifyTolerance );
136135
137136 printf (" Running Tiled SGEMM...\n " );
138137 benchmark.run (
139138 " Tiled (32x32)" ,
140- [](const float * A, const float * B, float * C, int M, int K, int N) {
139+ [](const float * A, const float * B, float * C, int M, int K, int N) {
141140 launch_tiled_sgemm<32 >(A, B, C, M, K, N);
142141 },
143142 M, K, N, config_.warmup_runs , config_.benchmark_runs , kStandardVerifyTolerance );
144143
145144 printf (" Running Bank Conflict Free SGEMM...\n " );
146145 benchmark.run (
147146 " Bank Conflict Free" ,
148- [](const float * A, const float * B, float * C, int M, int K, int N) {
147+ [](const float * A, const float * B, float * C, int M, int K, int N) {
149148 launch_bank_conflict_free_sgemm<32 >(A, B, C, M, K, N);
150149 },
151150 M, K, N, config_.warmup_runs , config_.benchmark_runs , kStandardVerifyTolerance );
152151
153152 printf (" Running Double Buffer SGEMM...\n " );
154153 benchmark.run (
155154 " Double Buffer" ,
156- [](const float * A, const float * B, float * C, int M, int K, int N) {
155+ [](const float * A, const float * B, float * C, int M, int K, int N) {
157156 launch_double_buffer_sgemm<32 >(A, B, C, M, K, N);
158157 },
159158 M, K, N, config_.warmup_runs , config_.benchmark_runs , kStandardVerifyTolerance );
160159 }
161160
162- void runTensorCoreKernels (SGEMMBenchmark& benchmark, int M, int K, int N) {
161+ void runTensorCoreKernels (SGEMMBenchmark & benchmark, int M, int K, int N) {
163162 if (!tensorCoresAvailable ()) {
164163 int device;
165164 CUDA_CHECK (cudaGetDevice (&device));
@@ -174,9 +173,9 @@ class BenchmarkRunner {
174173 " conversion/fallback)...\n " );
175174 benchmark.run (
176175 " Tensor Core (WMMA end-to-end)" ,
177- [](const float * A, const float * B, float * C, int M, int K, int N) {
176+ [](const float * A, const float * B, float * C, int M, int K, int N) {
178177 launch_tensor_core_sgemm_with_fallback (A, B, C, M, K, N,
179- defaultTensorCoreFallback ());
178+ defaultTensorCoreFallback ());
180179 },
181180 M, K, N, config_.warmup_runs , config_.benchmark_runs , kTensorCoreVerifyTolerance );
182181
0 commit comments