42 std::string mlgo_str = R
"_( 50 0, g76 , 8, f32, best-performance, static, gemm-type, [m,n,k,n] 52 1, g71 , 8, f16, best-performance, static, gemm-config-reshaped-only-rhs, [m,n,k,n] 53 2, g76 , 8, f16, best-performance, static, gemm-config-reshaped, [m,n,k,n] 56 b , 0, var, m, ==, num, 10., 1, 2 57 l , 1, gemm-type, reshaped 58 b , 2, var, r_mn, >=, num, 2., 3, 6 60 b , 3, var, n, >=, num, 200., 4, 5 61 l, 4, gemm-type, reshaped-only-rhs 62 l , 5, gemm-type, reshaped 63 l , 6, gemm-type, reshaped-only-rhs 66 b ,0,var, n, >, num, 100., 1, 4 67 b ,1,var, r_mnk, <=, num, 20., 2, 3 70 l ,2,gemm-config-reshaped-only-rhs, [4, 4,4,2,1,0,1] 71 l ,3,gemm-config-reshaped-only-rhs,[ 2, 2,4,2,1,1, 1 ] 72 b ,4,var, n, >=, num, 199.12, 5, 6 73 l ,5,gemm-config-reshaped-only-rhs, [1, 4,3,4,0,0,0] 74 l ,6,gemm-config-reshaped-only-rhs, [5, 4,4,5,1,1,0] 78 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 83 std::stringstream ss(mlgo_str); 92 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped_only_rhs(
Query{
"g71", DataType::F16, 100, 1024, 20, 32 }).second ==
GEMMConfigReshapedOnlyRHS{ 4, 4, 4, 2,
true,
false,
true }),
93 framework::LogLevel::ERRORS);
94 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped_only_rhs(
Query{
"g71", DataType::F16, 100, 1024, 20, 32 }).second ==
GEMMConfigReshapedOnlyRHS{ 4, 4, 4, 2,
true,
false,
true }),
95 framework::LogLevel::ERRORS);
96 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped_only_rhs(
Query{
"g71", DataType::F16, 128, 101, 20, 1 }).second ==
GEMMConfigReshapedOnlyRHS{ 2, 2, 4, 2,
true,
true,
true }),
97 framework::LogLevel::ERRORS);
98 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped_only_rhs(
Query{
"g71", DataType::F16, 400, 100, 512, 1 }).second ==
GEMMConfigReshapedOnlyRHS{ 5, 4, 4, 5,
true,
true,
false }),
99 framework::LogLevel::ERRORS);
100 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped_only_rhs(
Query{
"g71", DataType::F16, 400, 100, 512, 1 }).second ==
GEMMConfigReshapedOnlyRHS{ 5, 4, 4, 5,
true,
true,
false }),
101 framework::LogLevel::ERRORS);
103 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped(
Query{
"g76", DataType::F16, 100, 100, 20, 32 }).second ==
GEMMConfigReshaped{ 4, 2, 4, 2, 8,
true,
false,
true,
false }),
104 framework::LogLevel::ERRORS);
105 ARM_COMPUTE_EXPECT((heuristics.
query_gemm_config_reshaped(
Query{
"g76", DataType::F16, 128, 512, 1024, 1 }).second ==
GEMMConfigReshaped{ 4, 2, 4, 2, 8,
true,
false,
true,
false }),
106 framework::LogLevel::ERRORS);
109 TEST_CASE(InvalidDotmlgoSyntaxShouldReturnInvalidStatus, framework::DatasetMode::ALL)
111 std::string mlgo_str = R
"_( 113 gemm-version, [1,2,1] 117 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 121 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 124 std::stringstream ss(mlgo_str); 129 TEST_SUITE(InvalidDotmlgoSemanticsShouldReturnInvalidStatus) 146 std::string mlgo_str = R
"_( 148 gemm-version, [1,2,1] 153 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 157 std::stringstream ss(mlgo_str); 165 std::string mlgo_str = R
"_( 167 gemm-version, [1,2,1] 173 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 176 std::stringstream ss(mlgo_str); 183 std::string mlgo_str = R
"_( 185 gemm-version, [1,2,1] 189 0, g76 , 8, f32, best-performance, static, gemm-type, [m,n,k,n] 192 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 195 std::stringstream ss(mlgo_str); 201 TEST_CASE(RepeatedHeuristicsTableEntriesId, framework::DatasetMode::ALL) 203 std::string mlgo_str = R"_( 205 gemm-version, [1,2,1] 209 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 210 0, g71 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 213 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 216 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 219 std::stringstream ss(mlgo_str); 224 TEST_CASE(RepeatedHeuristicsTableEntriesIndex, framework::DatasetMode::ALL) 226 std::string mlgo_str = R"_( 228 gemm-version, [1,2,1] 232 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 233 1, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 236 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 239 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 242 std::stringstream ss(mlgo_str); 247 TEST_CASE(RepeatedHeuristicTreesId, framework::DatasetMode::ALL) 249 std::string mlgo_str = R"_( 251 gemm-version, [1,2,1] 255 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 256 1, g71 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 259 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 262 l ,0,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 265 std::stringstream ss(mlgo_str); 271 std::string mlgo_str = R"_( 273 gemm-version, [1,2,1] 277 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 282 std::stringstream ss(mlgo_str); 287 TEST_CASE(InvalidTreeMissingRoot, framework::DatasetMode::ALL) 289 std::string mlgo_str = R"_( 291 gemm-version, [1,2,1] 295 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 298 b ,2, var, m, ==, num, 10., 3, 4 299 l ,3,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 300 l ,4,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 303 std::stringstream ss(mlgo_str); 307 TEST_CASE(InvalidTreeMissingNodes, framework::DatasetMode::ALL) 309 std::string mlgo_str = R"_( 311 gemm-version, [1,2,1] 315 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 318 b ,0, var, m, ==, num, 10., 1, 2 319 l ,1,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 322 std::stringstream ss(mlgo_str); 326 TEST_CASE(InvalidTreeRepeatedNodeIds, framework::DatasetMode::ALL) 328 std::string mlgo_str = R"_( 330 gemm-version, [1,2,1] 334 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 337 b ,0, var, m, ==, num, 10., 1, 2 338 l ,1,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 339 l ,1,gemm-config-reshaped,[1,2,4,2,8,1,0,1,0] 340 l ,2,gemm-config-reshaped,[2,2,4,2,8,1,0,1,0] 343 std::stringstream ss(mlgo_str); 347 TEST_CASE(InvalidTreeDisjointNodes, framework::DatasetMode::ALL) 349 std::string mlgo_str = R"_( 351 gemm-version, [1,2,1] 355 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 358 b ,0, var, m, ==, num, 10., 1, 2 359 l ,1,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 360 l ,2,gemm-config-reshaped,[2,2,4,2,8,1,0,1,0] 362 b ,4, var, n, ==, num, 10., 5, 6 363 l ,5,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 364 l ,6,gemm-config-reshaped,[2,2,4,2,8,1,0,1,0] 366 l ,7,gemm-config-reshaped,[2,2,4,2,8,1,0,1,0] 369 std::stringstream ss(mlgo_str); 375 std::string mlgo_str = R"_( 377 gemm-version, [1,2,1] 381 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 384 b ,0, var, m, ==, num, 10., 0, 1 385 l ,1,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 388 std::stringstream ss(mlgo_str); 392 TEST_CASE(InvalidTreeCycle, framework::DatasetMode::ALL) 394 std::string mlgo_str = R"_( 396 gemm-version, [1,2,1] 400 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 403 b ,0, var, m, ==, num, 10., 1, 5 404 b ,1, var, n, ==, num, 10., 2, 3 405 l ,2,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 406 b ,3, var, k, ==, num, 10., 0, 4 407 l ,4,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 408 l ,5,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 411 std::stringstream ss(mlgo_str); 415 TEST_CASE(InvalidTreeInvalidFeatures, framework::DatasetMode::ALL) 417 std::string mlgo_str = R"_( 419 gemm-version, [1,2,1] 423 0, g76 , 8, f32, best-performance, static, gemm-config-reshaped, [m,n,k,n] 426 b ,0, var, magic_feature, ==, num, 10., 1, 2 427 l ,1,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 428 l ,2,gemm-config-reshaped,[4,2,4,2,8,1,0,1,0] 431 std::stringstream ss(mlgo_str); 437 TEST_CASE(InvalidUsageOfHeuristicsShouldReturnInvalidStatus, framework::DatasetMode::ALL)
439 std::string mlgo_str = R
"_( 441 gemm-version, [1,2,1] 445 0, g76 , 8, f32, best-performance, static, gemm-type, [m,n,k,n] 448 b , 0, var, m, ==, num, 10., 1, 2 449 l , 1, gemm-type, reshaped 450 b , 2, var, r_mn, >=, num, 2., 3, 6 451 b , 3, var, n, >=, num, 200., 4, 5 452 l , 4, gemm-type, reshaped-only-rhs 453 l , 5, gemm-type, reshaped 454 l , 6, gemm-type, reshaped-only-rhs 457 std::stringstream ss(mlgo_str); MLGOHeuristics heuristics
GEMM Configuration for Reshaped kernel.
std::stringstream ss(mlgo_str)
Reshaped GEMM kernel where only the rhs matrix is reshaped.
Reshaped GEMM kernel where both lhs and rhs matrices are reshaped.
std::pair< bool, GEMMType > query_gemm_type(const Query &query) const
Query the gemm type.
Copyright (c) 2017-2021 Arm Limited.
#define TEST_SUITE(SUITE_NAME)
#define TEST_CASE(TEST_NAME, MODE)
DatasetMode
Possible dataset modes.
GEMM Configuration for Reshaped Only RHS kernel.
MLGOHeuristics for configuring GEMM kernels.
std::pair< bool, GEMMConfigReshapedOnlyRHS > query_gemm_config_reshaped_only_rhs(const Query &query) const
Query the gemm configuration for reshaped only rhs kernel.
#define ARM_COMPUTE_EXPECT(X, LEVEL)
bool reload_from_stream(std::istream &istream)
(Re)Load the heuristics from reading an input stream
std::pair< bool, GEMMConfigReshaped > query_gemm_config_reshaped(const Query &query) const
Query the gemm configuration for reshaped kernel.