New updates for 2.11 (#775)
* New updates. * Minor profiler updates Co-authored-by: Aniket Shivam <ashivam@nvidia.com>
This commit is contained in:
co-authored by
Aniket Shivam
parent
d49bef88f9
commit
66d9cddc83
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
# Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -107,8 +107,8 @@ template<typename Shape_,
|
||||
typename LayoutA_,
|
||||
typename LayoutB_,
|
||||
typename LayoutC_,
|
||||
int LDG_N,
|
||||
int LDG_K,
|
||||
int THREAD_N,
|
||||
int THREAD_K,
|
||||
int MAX_THREADS_PER_BLOCK=512,
|
||||
bool DEBUG=false>
|
||||
void batched_gemv_threadblock_test(cutlass::gemm::GemmCoord problem_size, int num_batch)
|
||||
@@ -120,7 +120,7 @@ void batched_gemv_threadblock_test(cutlass::gemm::GemmCoord problem_size, int nu
|
||||
using LayoutB = LayoutB_;
|
||||
using ElementC = ElementC_;
|
||||
using LayoutC = LayoutC_;
|
||||
using ThreadShape = cutlass::gemm::GemmShape<1, LDG_N, LDG_K>;
|
||||
using ThreadShape = cutlass::gemm::GemmShape<1, THREAD_N, THREAD_K>;
|
||||
|
||||
using Core = typename cutlass::gemm::threadblock::DefaultGemvCore<
|
||||
Shape,
|
||||
@@ -192,14 +192,14 @@ void batched_gemv_threadblock_test(cutlass::gemm::GemmCoord problem_size, int nu
|
||||
matrix_C_computed.sync_device();
|
||||
|
||||
dim3 grid(1, 1); // only 1 CTA is used
|
||||
dim3 block(Shape::kN / LDG_N, num_batch, 1);
|
||||
dim3 block(Shape::kN / THREAD_N, num_batch, 1);
|
||||
|
||||
#if 0
|
||||
printf("block dim = %d x %d\n", block.x, block.y);
|
||||
#endif
|
||||
|
||||
// Some sanity checks
|
||||
EXPECT_TRUE( problem_size.n() % LDG_N == 0 );
|
||||
EXPECT_TRUE( problem_size.n() % THREAD_N == 0 );
|
||||
EXPECT_TRUE( block.x*block.y <= MAX_THREADS_PER_BLOCK );
|
||||
|
||||
test::gemm::threadblock::batched_gemv_threadblock_test_kernel<Mma><<< grid, block >>>(
|
||||
@@ -261,126 +261,126 @@ TEST(SM50_batched_gemv_threadblock, 4x1x64x64_crc_fp32_fp32_2N_2K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 2;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 2;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape, float, float,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 5x1x128x128_crc_fp32_fp32_4N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 128, 128);
|
||||
const int num_batch = 5;
|
||||
const int LDG_N = 4;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 4;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape, float, float,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_crc_fp32_fp32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
float, float,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_crc_fp16_fp32_2N_2K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 2;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 2;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_crc_fp16_fp32_2N_8K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 8;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 8;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_crc_fp16_fp32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_crc_i8_i32_2N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
int8_t, int32_t,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_crc_i8_i32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
int8_t, int32_t,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
// A: RowMajor
|
||||
@@ -392,126 +392,126 @@ TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcr_fp32_fp32_2N_2K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 2;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 2;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape, float, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 5x1x128x128_rcr_fp32_fp32_4N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 128, 128);
|
||||
const int num_batch = 5;
|
||||
const int LDG_N = 4;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 4;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape, float, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_rcr_fp32_fp32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
float, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcr_fp16_fp32_2N_2K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 2;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 2;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcr_fp16_fp32_2N_8K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 8;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 8;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_rcr_fp16_fp32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcr_i8_i32_2N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
int8_t, int32_t,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_rcr_i8_i32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
int8_t, int32_t,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::RowMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
// A: RowMajor
|
||||
@@ -523,124 +523,124 @@ TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcc_fp32_fp32_2N_2K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 2;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 2;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape, float, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 5x1x128x128_rcc_fp32_fp32_4N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 128, 128);
|
||||
const int num_batch = 5;
|
||||
const int LDG_N = 4;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 4;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape, float, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_rcc_fp32_fp32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
float, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcc_fp16_fp32_2N_2K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 2;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 2;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcc_fp16_fp32_2N_8K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 8;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 8;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 64, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_rcc_fp16_fp32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
cutlass::half_t, float,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 4x1x64x64_rcc_i8_i32_2N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 64, 64);
|
||||
const int num_batch = 4;
|
||||
const int LDG_N = 2;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 2;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 128, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
int8_t, int32_t,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
TEST(SM50_batched_gemv_threadblock, 16x1x17x64_rcc_i8_i32_1N_4K) {
|
||||
using namespace test::gemm::threadblock;
|
||||
cutlass::gemm::GemmCoord problem_size(1, 17, 64);
|
||||
const int num_batch = 16;
|
||||
const int LDG_N = 1;
|
||||
const int LDG_K = 4;
|
||||
const int THREAD_N = 1;
|
||||
const int THREAD_K = 4;
|
||||
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, LDG_K>;
|
||||
using Shape = cutlass::gemm::GemmShape<1, 32, THREAD_K>;
|
||||
batched_gemv_threadblock_test<Shape,
|
||||
int8_t, int32_t,
|
||||
cutlass::layout::RowMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
cutlass::layout::ColumnMajor,
|
||||
LDG_N, LDG_K>(problem_size, num_batch);
|
||||
THREAD_N, THREAD_K>(problem_size, num_batch);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************************************
|
||||
* Copyright (c) 2017 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* Copyright (c) 2017 - 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
Reference in New Issue
Block a user