Sources (all CUDA 10.2 compatible, no CUTLASS/Triton dependency): - leimao/CUDA-GEMM-Optimization: v00-v07, fp16 WMMA variant, double buffered - siboehm/SGEMM_CUDA: kernel 1-12, warp tiling + double buffering - wangzyon/NVIDIA_SGEMM_PRACTICE: kernel 1-7 - edtallison/sgemm-cuda: kernel 1-12 (reimplementation with notes) Key porting issue: ALL kernels hardcode WARPSIZE=32. BI-V100 has warp_size=64. Need to: 1. Replace all 32U / WARPSIZE constants with 64 2. Adjust warp subtile decomposition (WMITER, WNITER, WSUBM, WSUBN) 3. Adjust shared memory bank conflict avoidance (may have different bank count) 4. Test __shfl_down_sync with mask=0xFFFFFFFFFFFFFFFF (64-bit)
26 lines
936 B
Plaintext
26 lines
936 B
Plaintext
#pragma once
|
|
#include <cublas_v2.h>
|
|
#include <cuda_runtime.h>
|
|
#include <fstream>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/time.h>
|
|
#include <time.h>
|
|
#include <unistd.h>
|
|
|
|
void cudaCheck(cudaError_t error, const char *file,
|
|
int line); // CUDA error check
|
|
void CudaDeviceInfo(); // print CUDA information
|
|
|
|
void range_init_matrix(float *mat, int N);
|
|
void randomize_matrix(float *mat, int N);
|
|
void zero_init_matrix(float *mat, int N);
|
|
void copy_matrix(const float *src, float *dest, int N);
|
|
void print_matrix(const float *A, int M, int N, std::ofstream &fs);
|
|
bool verify_matrix(float *mat1, float *mat2, int N);
|
|
|
|
float get_current_sec(); // Get the current moment
|
|
float cpu_elapsed_time(float &beg, float &end); // Calculate time difference
|
|
|
|
void run_kernel(int kernel_num, int m, int n, int k, float alpha, float *A,
|
|
float *B, float beta, float *C, cublasHandle_t handle); |