From 0428c89fd5294347502b7fb5a46b8adb774775c4 Mon Sep 17 00:00:00 2001 From: dumerrill Date: Tue, 5 Dec 2017 22:40:47 -0500 Subject: [PATCH] Updating readme with relative per chart --- README.md | 9 ++++++++- media/cutlass-performance-plot.png | Bin 0 -> 40183 bytes 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 media/cutlass-performance-plot.png diff --git a/README.md b/README.md index ad859f04..b1d4e2d8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ CUTLASS is a collection of CUDA C++ template abstractions for implementing high-performance matrix-multiplication (GEMM) at all levels and scales within CUDA. It incorporates strategies for hierarchical decomposition and data movement similar -to those used to implement cuBLAS. CUTLASS decomposes these “moving parts” into +to those used to implement cuBLAS. CUTLASS decomposes these "moving parts" into reusable, modular software components abstracted by C++ template classes. These thread-wide, warp-wide, block-wide, and device-wide primitives can be specialized and tuned via custom tiling sizes, data types, and other algorithmic policy. The @@ -20,6 +20,13 @@ point (FP64) types. Furthermore, CUTLASS demonstrates CUDA's WMMA API for targe the programmable, high-throughput _Tensor Cores_ provided by NVIDIA's Volta architecture and beyond. +![ALT](/media/fig-09-complete-hierarchy.png "Relative performance of CUTLASS and cuBLAS for large matrices") + +CUTLASS is very efficient, with performance comparable to cuBLAS for scalar GEMM +computations. The above figure shows CUTLASS performance relative to cuBLAS +compiled with CUDA 9.0 running on an NVIDIA Tesla V100 GPU for large matrix +dimensions (M=10240, N=K=4096). + For more exposition, see our Parallel Forall blog post ["CUTLASS: Fast Linear Algebra in CUDA C++"](https://devblogs.nvidia.com/parallelforall/cutlass-linear-algebra-cuda). diff --git a/media/cutlass-performance-plot.png b/media/cutlass-performance-plot.png new file mode 100644 index 0000000000000000000000000000000000000000..96171ed0dd9267f1ab7177f440ebb2a063a5ddce GIT binary patch literal 40183 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 G_`d+XDI{M2 literal 0 HcmV?d00001